SQL查询需求:合并两张表中指定字段的所有结果
解决办法:用UNION/UNION ALL合并两个表的数据
嘿,别担心,这绝对是SQL新手入门阶段很常见的需求,我来一步步给你讲清楚怎么实现!
你的核心需求是:把表1的customer_name、customer_address、country、gender,和表2的customer_name、customer_address整合到同一个结果集里——因为表2没有country和gender,这两个字段我们可以用NULL来占位填充,保证两个查询的结构一致。
具体SQL语句
-- 如果你需要保留所有重复记录,用UNION ALL(性能更好) SELECT customer_name, customer_address, country, gender FROM table1 UNION ALL SELECT customer_name, customer_address, NULL AS country, -- 表2无此字段,用NULL占位 NULL AS gender -- 同理填充gender字段 FROM table2; -- 如果你想自动去除完全重复的记录(name+address都相同的行),把UNION ALL换成UNION SELECT customer_name, customer_address, country, gender FROM table1 UNION SELECT customer_name, customer_address, NULL AS country, NULL AS gender FROM table2;
关键细节解释
- 字段对齐要求:
UNION系列关键字要求前后两个SELECT语句返回的字段数量、顺序、数据类型必须一致,所以表2的查询里必须补上country和gender字段,用NULL填充是最合理的选择(因为表2确实没有这些数据)。 - UNION vs UNION ALL:
UNION ALL会保留所有原始记录,包括重复的,执行速度更快;UNION会自动去除两个结果集中完全重复的行(即四个字段都一模一样的记录),但因为要做去重校验,性能会比UNION ALL稍差。你可以根据自己的实际需求选择。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

