sql - 如何比较同一个表中的两个字段以查看它们是否匹配,不匹配,或者在 SQL 中使用 Group By 时两者都为 NULL?
问题描述
我有一个包含以下内容的表:
Team ID
-- --
AB 100001
DC 100001
DC 100032
AB 100021
AB 100032
AB 100044
DC 100044
DC 100323
我想看看每个团队的 ID 值是一致的(AB 和 DC 都存在相同的 ID)。由于 TEAM AB 的大小为 100 万,TEAM DC 的大小为 50k,将会出现一些 NULL/不匹配。
我试过了,但没有另一个字段 ID 可以比较
SELECT Team, ID FROM Table
WHERE ID IN
(
SELECT ID FROM Table
)
我想要的输出是一个新表,其中显示了“团队”和“ID”字段以及显示它们是否匹配的第三列。
AB DC MATCH
-- -- --
100001 100001 TRUE
100032 100032 TRUE
100044 100044 TRUE
100021 100323 FALSE
解决方案
显然你想要一个完整的外部连接:
with data as (
select 'ab' team, 100 id
union all select 'ab', 101
union all select 'ab', 102
union all select 'cd', 102
union all select 'cd', 101
union all select 'cd', 105
)
select a.id ab, b.id cd, ifnull(a.id=b.id, false) match
from (select team, id from data where team='ab') a
full outer join (select team, id from data where team='cd') b
on a.id=b.id
推荐阅读
- java - 如何区分超类的ArrayList中的子类
- tensorflow - 使用 Keras 复制结果
- javascript - 使用 vanilla Javascript ES6 的链延迟函数
- python-3.x - 哪个 python 3.x 适合 ubuntu 14.04
- c# - 当 XML 具有相同节点名称的节点时,将 XML 数据插入 SQL 数据库
- javascript - 按 mongoose 中的 _id 值范围选择文档
- python - 循环收集 iPhoto 元数据找不到文件
- php - 如何检查单选按钮是否包含正确答案?
- r - 从 excel 运行 RScript 权限被拒绝 错误代码 70
- c# - 使用 wshttpbinding 的 WCF 用户名和密码验证不起作用