This question was migrated来自数据库管理员堆栈交换,因为它可以在堆栈溢出时得到响应。
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.
我假设EINNOT NULL,但REG可以是NULL,因为您写道:
100%的记录都有EIN,但有一小部分记录有注册ID。
NULL不符合运算符<>的条件,因此不排除(323, 171)
我从结果中排除了带有regIS NULL的行,这似乎是您的意图。因此不包括在内。

关于sql - 获取两个值彼此唯一的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16226672/

10-16 17:21