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

同机SQL数据库两Vendor表对比:获取DB2独有的Stock记录

解决方案:找出DB2.Vendor独有的记录

先拆解你那两个语句的问题:

  • 第一个语句里的Where (Stock != Stock)是无效条件——同一行的Stock不可能不等于自身,相当于直接过滤掉DB2的所有数据,所以Except自然返回空结果。
  • 第二个语句用Union后加Group by Vendor.Stock报错,是因为Union合并后的结果中,仅按Stock分组但查询所有字段,数据库无法确定非分组字段的取值规则,语法不合法。

下面是三种可行的写法,按需选择:

方法1:NOT EXISTS(推荐,性能更优)

SELECT * 
FROM DB2.Vendor db2_v
WHERE NOT EXISTS (
    SELECT 1 
    FROM DB1.Vendor db1_v
    WHERE db1_v.Stock = db2_v.Stock
)

逻辑:遍历DB2的每条记录,检查DB1中是否存在相同Stock值的记录,无匹配则保留该DB2记录。

方法2:LEFT JOIN + IS NULL

SELECT db2_v.*
FROM DB2.Vendor db2_v
LEFT JOIN DB1.Vendor db1_v ON db1_v.Stock = db2_v.Stock
WHERE db1_v.Stock IS NULL

逻辑:将两张表按Stock左连接,DB1无匹配的记录会显示NULL,过滤出这些行即为DB2独有的数据。

方法3:正确使用EXCEPT

SELECT * FROM DB2.Vendor
EXCEPT
SELECT * FROM DB1.Vendor

注意:该写法要求两张表所有字段的结构、数据类型完全一致,且会自动去重。如果DB2内存在重复Stock的记录,EXCEPT仅保留一条;若需保留DB2的全部重复记录,优先选用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:04