如何为prescriptions表所有列统一添加prescription_前缀别名?
嘿,手动给每一列加别名确实太繁琐了!我之前处理过类似的需求,给你分享几个不同数据库下的高效解决方案,不用一个个敲:
方案思路核心
利用数据库的系统元数据表(存储表结构信息的内置表),动态拼接出带前缀的别名语句,直接生成可以复用的完整SQL。
MySQL/MariaDB 实现
直接运行下面的查询,会生成完整的带前缀别名的SELECT语句:
SELECT CONCAT( 'SELECT ', GROUP_CONCAT( CONCAT('`', column_name, '` AS `prescription_', column_name, '`') SEPARATOR ', ' ), ' FROM prescriptions;' ) AS full_query FROM information_schema.columns WHERE table_schema = DATABASE() -- 自动取当前连接的数据库 AND table_name = 'prescriptions';
- 运行后,
full_query字段就是你需要的完整SQL,复制出来直接执行就行 - 如果只是需要列别名的部分,去掉外层的
CONCAT,只保留GROUP_CONCAT的结果即可
PostgreSQL 实现
PostgreSQL可以用string_agg和quote_ident(处理特殊列名)来生成:
SELECT CONCAT( 'SELECT ', string_agg( quote_ident(column_name) || ' AS ' || quote_ident('prescription_' || column_name), ', ' ), ' FROM prescriptions;' ) AS full_query FROM information_schema.columns WHERE table_schema = 'public' -- 替换成你的表所在schema,默认是public AND table_name = 'prescriptions';
SQL Server 实现
用sys.columns系统表来生成:
SELECT CONCAT( 'SELECT ', STRING_AGG( QUOTENAME(name) + ' AS ' + QUOTENAME('prescription_' + name), ', ' ), ' FROM prescriptions;' ) AS full_query FROM sys.columns WHERE object_id = OBJECT_ID('prescriptions');
额外提示
- 如果后续表结构有变动(新增/删除列),重新运行对应的查询就能生成最新的SQL,不用手动修改
- 要是你的列名包含特殊字符(比如空格、关键字),上面的方案里的
quote_ident/QUOTENAME/反引号会自动处理,避免语法错误
内容的提问来源于stack exchange,提问作者Rasive
相关产品推荐
相关产品推荐

