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

Snowflake SQL:修复两表不匹配行查询返回空结果的问题

修复查询:找出两表中无匹配的行

你写的查询有两个致命问题:

  • 两次子查询都查的是TABLE_1,根本没用到TABLE_2,等于在同一张表的数据里找差异,自然不会有结果
  • 用了UNION(会自动去重),最后having count(*) > 1的逻辑完全反了——你要找的是只在其中一张表出现的行,这类行在合并后的结果里只会出现1次,而不是大于1次

下面是两种正确的写法:

方法1:用EXCEPT + UNION ALL

EXCEPT可以找出在第一个表存在但第二个表不存在的行,反过来再执行一次,用UNION ALL合并两边的差异结果:

-- 找出TABLE_1有但TABLE_2没有的行
SELECT employee_id, work_tenure FROM TABLE_1
EXCEPT
SELECT employee_id, work_tenure FROM TABLE_2

UNION ALL

-- 找出TABLE_2有但TABLE_1没有的行
SELECT employee_id, work_tenure FROM TABLE_2
EXCEPT
SELECT employee_id, work_tenure FROM TABLE_1

方法2:用LEFT JOIN筛选无匹配行

通过左连接后判断对方表的字段是否为NULL,来找出无匹配的行:

-- TABLE_1中在TABLE_2无匹配的行
SELECT t1.employee_id, t1.work_tenure
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 
  ON t1.employee_id = t2.employee_id 
  AND t1.work_tenure = t2.work_tenure
WHERE t2.employee_id IS NULL

UNION ALL

-- TABLE_2中在TABLE_1无匹配的行
SELECT t2.employee_id, t2.work_tenure
FROM TABLE_2 t2
LEFT JOIN TABLE_1 t1 
  ON t2.employee_id = t1.employee_id 
  AND t2.work_tenure = t1.work_tenure
WHERE t1.employee_id IS NULL

如果你的表存在重复行,需要先去重的话,可以在每个子查询里加上DISTINCT,比如SELECT DISTINCT employee_id, work_tenure FROM TABLE_1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:44:53