Snowflake中校验表A与表B数据一致性的SQL查询需求
找出表A中未同步到表B的行
我有两张表:
- 表A:包含
Id和appleId列 - 表B:包含
Id和bappleId列
业务规则是:表A新增行时,表B需要同步创建对应appleId = bappleId的行。目前表A有4行数据,表B仅同步了2行,需要编写SQL找出表A中未同步到表B的行,期望获取这些行的appleId或表A的Id。
表A数据
| Id | appleId |
|---|---|
| 3 | 33 |
| 4 | 34 |
| 5 | 35 |
| 6 | 36 |
表B数据
| Id | bappleId |
|---|---|
| 1 | 33 |
| 2 | 34 |
原SQL问题
之前尝试的SQL是从表B查询不存在于表A的行,只能找出表B的多余数据,不符合需求:
select bappleId from table b as b where not exists (select appleid from table a as a where a.appleId = b.bappleid)
正确SQL写法
方法1:使用NOT EXISTS
从表A出发,筛选出appleId在表B中没有对应bappleId的行:
SELECT a.Id, a.appleId FROM tableA a WHERE NOT EXISTS ( SELECT 1 FROM tableB b WHERE b.bappleId = a.appleId );
方法2:使用LEFT JOIN + IS NULL
通过左连接表A和表B,筛选出表B中匹配项为空的行:
SELECT a.Id, a.appleId FROM tableA a LEFT JOIN tableB b ON a.appleId = b.bappleId WHERE b.Id IS NULL;
两种写法都会返回表A中未同步的行(Id为5、6,appleId为35、36)。
内容的提问来源于stack exchange,提问作者anon3289hfe9w
相关产品推荐
相关产品推荐

