This question was migrated来自数据库管理员堆栈交换,因为它可以在堆栈溢出时得到响应。
Migrated6年前。
感兴趣的值是
每个值都有很多记录。
我想知道的是哪一对值只会同时出现(或空白)。
所以在上面的例子中,我想选择322和168,因为它们每次出现时都会一起出现,但是我也想选择323和171,因为它们从来没有出现过其他值,只是一个非值。100%的记录都有EIN,但有一小部分记录有注册ID。
有什么关于如何查询的建议吗?
-> SQLfiddle.
我假设
100%的记录都有EIN,但有一小部分记录有注册ID。
我从结果中排除了带有reg
Migrated6年前。
感兴趣的值是
EIN
和注册号REG
。每个值都有很多记录。
我想知道的是哪一对值只会同时出现(或空白)。
ID EIN REG
12 321 124
13 321 125
14 322 168
15 322 168
16 323 171
17 323 171
18 323
所以在上面的例子中,我想选择322和168,因为它们每次出现时都会一起出现,但是我也想选择323和171,因为它们从来没有出现过其他值,只是一个非值。100%的记录都有EIN,但有一小部分记录有注册ID。
有什么关于如何查询的建议吗?
最佳答案
许多可能的方法之一:
SELECT DISTINCT ein, reg
FROM test t
WHERE reg is NOT NULL
AND NOT EXISTS (
SELECT 1 FROM test t1
WHERE t1.ein = t.ein AND t1.reg <> t.reg
OR t1.reg = t.reg AND t1.ein <> t.ein);
ein | reg
----+-----
323 | 171
322 | 168
-> SQLfiddle.
我假设
EIN
是NOT NULL
,但REG
可以是NULL
,因为您写道:100%的记录都有EIN,但有一小部分记录有注册ID。
NULL
不符合运算符<>
的条件,因此不排除(323, 171)
。我从结果中排除了带有reg
IS NULL
的行,这似乎是您的意图。因此
不包括在内。关于sql - 获取两个值彼此唯一的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16226672/
10-16 17:21