SQL中合并两表后新表命名及列重命名问题咨询
关于UNION ALL合并结果的表名与列名修改问题
首先明确:你当前的UNION ALL查询只是临时返回一个结果集,不会自动生成持久化的新表,所以不存在默认的表名,也就没法直接用ALTER TABLE语句修改列名。
针对你的需求,有两种解决方式:
1. 直接在查询中指定统一列名(无需生成表)
结果集的列名由第一个SELECT语句的列名决定,你可以直接在第一个查询里给列起别名,一步到位得到想要的列名:
SELECT client_id ,last_name AS client_name -- 这里把列名改成你需要的名称,比如client_name FROM INDIVIDUAL_CLIENT UNION ALL SELECT client_id ,bus_name FROM BUSINESS_CLIENT;
如果需要区分个人/企业的名称类型,可以额外加一个标识列:
SELECT client_id ,last_name AS client_name ,'INDIVIDUAL' AS client_type FROM INDIVIDUAL_CLIENT UNION ALL SELECT client_id ,bus_name AS client_name ,'BUSINESS' AS client_type FROM BUSINESS_CLIENT;
2. 生成持久化新表后再修改列名
如果必须将合并结果保存为表,需要用对应数据库的语法手动指定表名,之后再执行ALTER TABLE:
MySQL/MariaDB/PostgreSQL
-- 生成新表,指定表名为merged_clients CREATE TABLE merged_clients AS SELECT client_id ,last_name FROM INDIVIDUAL_CLIENT UNION ALL SELECT client_id ,bus_name FROM BUSINESS_CLIENT; -- 修改列名 ALTER TABLE merged_clients RENAME COLUMN last_name TO client_name;
SQL Server
-- 生成新表,指定表名为merged_clients SELECT client_id ,last_name INTO merged_clients FROM INDIVIDUAL_CLIENT UNION ALL SELECT client_id ,bus_name FROM BUSINESS_CLIENT; -- 修改列名 EXEC sp_rename 'merged_clients.last_name', 'client_name', 'COLUMN';
内容的提问来源于stack exchange,提问作者Soyoon Moon
相关产品推荐
相关产品推荐

