这是我想要完成的:
我有两张 table ,第一张和第二张。他们每个人都有一个 ID 列。他们可能有其他专栏,但这些并不重要。我有第三张 table ,称之为第三张。它包含两列,ID 和 OTHERID。 OTHERID 引用表 first 和 second 中可能存在或不存在的条目。
我想查询第三个并查找没有在第一个或第二个表中找到的 OTHERID 列值的行。目标是从表 third 中删除这些行。
例子:
第一个表:
ID
1
2
3
第二个表:
ID
6
7
8
第三张 table
ID | OTHERID
21 1
22 2
23 3
24 4
25 5
26 6
27 7
28 8
在这种情况下,我想从第一个表或第二个表中没有匹配 ID 的第三个检索 ID。我希望取回以下 ID:
24
25
我尝试过的:
我已经做了一些事情来取回不在第一位的第三位的条目:
select t.* from third t where not exists (select * from first f where t.otherid = f.id);
这将使我返回以下行:
ID | OTHERID
24 4
25 5
26 6
27 7
28 8
同样,我可以得到那些不在第二位的:
select t.* from third t where not exists (select * from second s where t.otherid = s.id);
我会得到:
ID | OTHERID
21 1
22 2
23 3
24 4
25 5
今天早上我想不通的是如何将两个查询组合在一起以获得两个结果集之间的交集,以便只返回 ID 为 24 和 25 的行。这些是我可以删除的两行,因为它们是孤儿。
你会如何解决这个问题?我认为我在正确的轨道上,但我只是在这一点上旋转,没有任何进展。
最佳答案
也许是这样的:
SELECT third.*
FROM third
LEFT JOIN first ON third.otherID = first.id
LEFT JOIN second ON third.otherID = second.id
WHERE first.id IS NULL AND second.id IS NULL
关于用于查找其他表中不存在的行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118469/