合并Table1与Table2并剔除与Table3用户名重复的行
合并两表并剔除重复行的SQL解决方案
核心逻辑
先把Table1和Table2的所有数据合并到一起,再筛掉那些Username与Table3重复的记录,最后将结果保存为新表即可。
你之前语句的问题
- 第一条查询仅合并了两表数据,但和后续DELETE操作完全无关联,且DELETE无法直接引用未关联的Table2或Table3
- 第二条语句中的SELECT和DELETE是两个独立操作,没有逻辑关联,还会直接修改原Table1的数据,不符合你生成新表的需求
正确的SQL写法
先验证结果(不创建新表)
先执行以下语句确认结果是否符合预期:
SELECT * FROM ( SELECT Company, Username, Time FROM Table1 UNION ALL SELECT Company, Username, Time FROM Table2 ) AS combined_data WHERE combined_data.Username NOT IN (SELECT Username FROM Table3);
这里先用UNION ALL合并Table1和Table2得到临时集合combined_data,再通过NOT IN排除掉Table3中存在的Username。
将结果保存为新表
不同数据库的语法略有差异,以下是常用数据库的写法:
MySQL/MariaDB
CREATE TABLE New_Combined_Table AS SELECT * FROM ( SELECT Company, Username, Time FROM Table1 UNION ALL SELECT Company, Username, Time FROM Table2 ) AS combined_data WHERE combined_data.Username NOT IN (SELECT Username FROM Table3);
SQL Server
SELECT * INTO New_Combined_Table FROM ( SELECT Company, Username, Time FROM Table1 UNION ALL SELECT Company, Username, Time FROM Table2 ) AS combined_data WHERE combined_data.Username NOT IN (SELECT Username FROM Table3);
PostgreSQL
与MySQL语法一致:
CREATE TABLE New_Combined_Table AS SELECT * FROM ( SELECT Company, Username, Time FROM Table1 UNION ALL SELECT Company, Username, Time FROM Table2 ) AS combined_data WHERE combined_data.Username NOT IN (SELECT Username FROM Table3);
示例数据验证
用你提供的测试数据执行上述语句后,会得到预期结果:
Company Username Time Company1 Bobbio123 23:77 Company1 Yellow8 12:12 Company1 Travis9 14:16 Company1 Yessir 06:00 Company2 Sally111 20:10 Company2 TammyTammy 02:11
原合并数据中的Leonardy和ScammyDavis因在Table3中存在,被成功剔除。
内容的提问来源于stack exchange,提问作者Dr. Spock
相关产品推荐
相关产品推荐

