如何查询表并仅返回连接表中没有记录的结果?
我尝试过这样的事情,但它似乎不起作用:
SELECT a.* FROM tableA a
LEFT JOIN TableB b
ON b.aid = a.id
AND b.id IS NULL
WHERE a.status = 1
由于某种原因,这似乎不起作用。由于性能原因,我试图避免子查询。
答案 0 :(得分:2)
outer join
正如评论中所提到的,join
和b.id
关键字在MySQL中是相同的。
但是,将WHERE
空检查移动到TableB
子句会产生影响(在连接后有效地进行检查,而不是作为连接的一部分)。
要解释一下,在您的代码中,数据库正在检查AID
中TableA
列的值是否与ID
中的当前行匹配的行,以及{{1} } {} {}的列值。由于这可能永远不会匹配(假设null
中没有TableB
列的null
值的行,您将无法从{{1}返回数据(每个列都为null)。
在我的代码中,数据库正在检查ID
中的一行,其中TableB
列值与TableB
中当前行的AID
列相匹配,并且只有在找不到匹配项的情况下,它才会id
为TableA
中的每一列返回null
TableB
。
然后,一旦完成,它会检查合并的数据,以查找tableA
列为b.id
的所有行...实际上只返回{{1}}中存在的行在null
答案 1 :(得分:-1)