SQL Server使用SELECT *时如何让返回列别名同时带表名和字段名
解决方案
通用方案(适配所有关系型数据库)
核心思路是通过查询数据库元数据表,自动拼接带表名前缀的列别名查询语句,无需手动逐个书写字段:
- MySQL 示例:
SELECT GROUP_CONCAT( CONCAT(table_name, '.', column_name, ' AS `', table_name, '.', column_name, '`') ORDER BY table_name, ordinal_position ) AS select_clause FROM information_schema.columns WHERE table_schema = '你的数据库名' AND table_name IN ('table1', 'table2', 'table3'); -- 直接填入你需要查询的所有表名即可
执行上述语句会直接输出完整的SELECT子句,替换原有查询的SELECT *即可得到符合需求的带前缀列名结果。
- PostgreSQL 示例:
SELECT string_agg( format('%I.%I AS "%I.%I"', table_name, column_name, table_name, column_name), ', ' ORDER BY table_name, ordinal_position ) AS select_clause FROM information_schema.columns WHERE table_schema = 'public' AND table_name IN ('table1', 'table2', 'table3');
数据库原生简化方案
部分数据库提供更简便的结构化输出方案,连动态生成SQL的步骤都可以省略:
- PostgreSQL 可以通过JSON输出避免字段重名:
SELECT to_json(table1) AS table1, to_json(table2) AS table2, to_json(table3) AS table3 FROM table1, table2, table3;
返回结果中每个表对应一个JSON对象,可直接通过表名->'字段名'的方式取对应值,20-30张表的场景仅需书写20-30次to_json(表名) AS 表名即可,无需处理字段。
- SQL Server 可通过
FOR JSON语法实现类似的结构化输出效果。
注意:标准SQL语法本身没有定义
SELECT *自动追加表名前缀的规则,上述方案均可避免手动罗列上百个字段的繁琐操作,完全满足你的使用需求。
内容的提问来源于stack exchange,提问作者Jota Pardo
相关产品推荐
相关产品推荐

