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

Azure SQL DB中获取含重复项的两表差集并存入第三表的SQL实现

保留重复行的双表差集查询方案(Azure SQL 纯SQL实现)

核心思路

普通EXCEPT会自动去重,要保留原本的重复行数,需要对两张表中完全相同的行按出现顺序分配独立序号,再将序号作为匹配条件之一做差集,即可保留原始重复行数。


1. 查询A表减B表的结果(并存入第三张表)

WITH A_Ranked AS (
    SELECT 
        AppName,
        [Creation Time],
        [Completion Time],
        Status,
        -- 按所有列分组,相同内容的行按出现顺序编号
        ROW_NUMBER() OVER (
            PARTITION BY AppName, [Creation Time], [Completion Time], Status 
            ORDER BY (SELECT 0)
        ) AS RowNum
    FROM TableA
),
B_Ranked AS (
    SELECT 
        AppName,
        [Creation Time],
        [Completion Time],
        Status,
        ROW_NUMBER() OVER (
            PARTITION BY AppName, [Creation Time], [Completion Time], Status 
            ORDER BY (SELECT 0)
        ) AS RowNum
    FROM TableB
)
-- 结果直接存入第三张表TableA_Minus_B,不需要存表则删除INTO子句即可
SELECT AppName, [Creation Time], [Completion Time], Status
INTO TableA_Minus_B
FROM A_Ranked
EXCEPT
SELECT AppName, [Creation Time], [Completion Time], Status
FROM B_Ranked

2. 查询B表减A表的结果(并存入第三张表)

WITH A_Ranked AS (
    SELECT 
        AppName,
        [Creation Time],
        [Completion Time],
        Status,
        ROW_NUMBER() OVER (
            PARTITION BY AppName, [Creation Time], [Completion Time], Status 
            ORDER BY (SELECT 0)
        ) AS RowNum
    FROM TableA
),
B_Ranked AS (
    SELECT 
        AppName,
        [Creation Time],
        [Completion Time],
        Status,
        ROW_NUMBER() OVER (
            PARTITION BY AppName, [Creation Time], [Completion Time], Status 
            ORDER BY (SELECT 0)
        ) AS RowNum
    FROM TableB
)
-- 结果直接存入第三张表TableB_Minus_A,不需要存表则删除INTO子句即可
SELECT AppName, [Creation Time], [Completion Time], Status
INTO TableB_Minus_A
FROM B_Ranked
EXCEPT
SELECT AppName, [Creation Time], [Completion Time], Status
FROM A_Ranked

说明

  • 纯SQL实现,无需存储过程,完全兼容Azure SQL数据库
  • ORDER BY (SELECT 0)是为了满足窗口函数的语法要求,不需要指定特定排序规则,只要相同内容的行按顺序编号即可,不影响最终结果
  • 该逻辑会自动匹配行内容和出现次数:比如A中某行出现2次、B中同内容行出现2次,会完全抵消;A中某行出现2次、B中同内容行出现0次,会保留2行在A减B的结果中,完全符合需求预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:12:00