我有两张桌子。一个包含 id 和值列表(一对多)。还有另一个表,其中包含用于匹配第一个表中的这些值的值列表。我想获取第一个表中没有第二个表中所有值的所有 id。如果一个idin具有表中与之关联的ownercars所有值,则根本不应该返回它们。codecarcodes
IE
ownercars
id | code |
1 | carA |
1 | carB |
1 | carC |
2 | carD |
3 | carD |
3 | carE |
3 | carF |
4 | carD |
4 | carE |
carcodes
|code |
| carD |
| carE |
此查询应返回id1 和 2,因为id1 缺少 carD 和 carE,而id2 缺少 carE。
我尝试加入代码为空的两个表。
尽管在上面的示例中这仍然返回id3,因为它看到表中不存在 carFcarcodes并简单地返回它。但不包括id4,因为两者都存在。
我还尝试通过比较表carcodes中存在的ownercars内容和每个 id 所拥有的内容之间的计数,尽管这行得通,但它不是高性能的。
我已经研究过使用ANY或ALL但没有成功。
SELECT oc.id
FROM ownercars as oc
LEFT JOIN carcodes as cc
on oc.code = cc.code
WHERE cc.code IS NULL
我希望能够id根据所有代码都存在于其中的事实排除 3。需要对上一个查询进行哪些更改才能执行此操作?