You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:35:19