我一直在做的是
SELECT * FROM a LEFT JOIN b ON b.a_id=a.id WHERE b.id IS NULL
基本上,我正在尝试查找没有关联a
的{{1}}行,其中外键存储在b
上。这是正确的方法吗,还是有不同类型的联接来做到这一点?
答案 0 :(得分:7)
您正在寻找NOT EXISTS
:
SELECT
*
FROM
a
WHERE
NOT EXISTS (SELECT 1 FROM b WHERE a_id = a.id)
在b.a_id
上建立索引有助于提高此查询的效果。
答案 1 :(得分:5)
答案 2 :(得分:2)
你可以尝试
Select * from a where a.id not in (Select a_id from b)
答案 3 :(得分:1)
之前的三个回答都是正确的,此时我认为你可以考虑三种查询的表现。您可以查看以下网址:
http://rockycode.com/blog/not-vs-outer-join-performance/
在我看来,我认为外部联接是最好的方式,如果你没有太多的行,那么这三种方式或多或少相等。