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

SQL两表关联时删除dbo表与stage表匹配重复记录的方法

需求说明

需要完成两个表的去重+导入操作,规则如下:

  • 关联stage、dbo两张表,排查两表中业务字段匹配的重复记录
  • 匹配到的重复记录从dbo表中删除
  • 去重完成后,将stage表全量数据导入dbo表
示例数据参考

stage表初始数据

market cost ra file_id 
CA     32   2   200
CA     44   5   200
TX     22   2   200

dbo表初始数据

market cost ra  file_id
CA     72   9    100
CA     44   5    100
TX     22   2    100

去重后dbo表预期保留数据

market cost ra  file_id
CA     72   9    100
原有查询语句问题

之前写的重复识别语句存在语法和逻辑问题,无法实现删除效果,原语句如下:

select s.market, s.cost,s.ra , s.[file_id] ,count(*)
from stage table s
join dbo table d on s.market=d.market and  s.cost=d.cost, s.ra=d.ra
group by  s.market, s.cost,s.ra , s.[file_id]    
having count(*) > 1;

具体问题点:

  • 表别名写法错误,给表定义别名不需要额外加table关键字,正确写法是stage s、dbo d
  • JOIN关联条件语法错误,多个匹配字段之间要用AND连接,不能用逗号分隔
  • 仅做了重复值聚合查询,没有定位到dbo表中需要删除的具体行,无法支撑删除操作
正确实现SQL

步骤1:删除dbo表中与stage表匹配的重复记录

重复判定规则:market、cost、ra三个业务字段值完全一致即判定为重复,删除语句如下:

DELETE d
FROM dbo d
INNER JOIN stage s 
  ON d.market = s.market 
  AND d.cost = s.cost 
  AND d.ra = s.ra;

安全提示:执行删除前可以把DELETE d替换为SELECT d.*先运行,预览待删除的记录是否符合预期,确认无误后再执行删除操作,避免误删。

用样例数据执行该语句后,dbo表中CA 44 5 100、TX 22 2 100两条和stage表字段匹配的记录会被删除,仅保留CA 72 9 100,完全符合预期结果。

步骤2:将stage表全量数据导入dbo表

删除完成后执行插入语句,把stage的全量数据写入dbo即可:

INSERT INTO dbo (market, cost, ra, file_id)
SELECT market, cost, ra, file_id
FROM stage;

执行完成后dbo表会包含原有保留的1条非重复记录+stage导入的3条记录,无重复冲突。

内容的提问来源于stack exchange,提问作者user15132810

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:54:52