我在雪花中有两个表 - 一个包含客户填写的记录的表,以及一个包含州,地区和子区域字段的参考表。参考表是准确的,因为如果州是“加利福尼亚”,区域和次区域分别是西部和太平洋。
我正在尝试创建质量检查以确认我的记录表中的数据也是准确的。当记录没有反映州/地区/子地区的准确组合时,雪花 sql 查询应该会产生结果。例如,如果一条客户记录包含“加利福尼亚”、“东部”、“太平洋”,我希望这条记录显示在查询结果中。
我试图连接这两个表,但我正在为 sql 语法而苦苦挣扎。也审查了不同的案例陈述组合,但到目前为止没有成功。
参考表
状态 | 地区 | 次区域 |
---|---|---|
加州 | 西 | 太平洋 |
阿拉巴马州 | 南 | 东南 |
缅因州 | 东 | 东北 |
客户记录表
ID | 状态 | 地区 | 次区域 |
---|---|---|---|
3469 | 加州 | 东 | 太平洋 |
4874 | 阿拉巴马州 | 南 | 东南 |
5890 | 缅因州 | 东 | 北 |
希望查询结果显示:
ID | 状态 | 地区 | 次区域 |
---|---|---|---|
3469 | 加州 | 东 | 太平洋 |
5890 | 缅因州 | 东 | 北 |
我想你想要
not exists
.
显示所有州/地区/次地区无效的客户(即不存在于参考表中):
select c.*
from customer c
where not exists (
select 1
from reference r
where r.state = c.state and r.region = c.region and r.subregion = c.subregion
)
我们还可以专门寻找状态存在但区域/子区域无效的客户:
select c.*
from customer c
where not exists (
select 1
from reference r
where r.state = c.state and r.region = c.region and r.subregion = c.subregion
) and exists (
select 1
from reference r
where r.state = c.state
)