语言中没有内置的方法来解决它(坦率地说,* 通常是一种不好的做法,因为它可能会导致潜在缺陷随着表模式的变化而出现 - 你可以做 table1.*, table2.acolumn, tabl2.bcolumn如果你想要一个表的所有并有选择地从另一个表中选择),但如果 PostgreSQL 支持 INFORMATION_SCHEMA,你可以执行以下操作:
DECLARE @sql AS varchar
SELECT @sql = COALESCE(@sql + ', ', '')
+ '[' + TABLE_NAME + '].[' + COLUMN_NAME + ']'
+ CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ('table1', 'table2')
ORDER BY TABLE_NAME, ORDINAL_POSITION
PRINT @sql
并粘贴结果以节省大量输入。当然,您需要手动为具有相同名称的列设置别名。如果您愿意(但我不这样做),您还可以编码生成唯一名称:
SELECT @sql = COALESCE(@sql + ', ', '')
+ '[' + TABLE_NAME + '].[' + COLUMN_NAME + '] '
+ 'AS [' + TABLE_NAME + '_' + COLUMN_NAME + ']'
+ CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ('table1', 'table2')
ORDER BY TABLE_NAME, ORDINAL_POSITION