如何获取MySQL中没有连接匹配的查询结果?

时间:2018-06-15 11:32:29

标签: mysql performance

如何查询表并仅返回连接表中没有记录的结果?

我尝试过这样的事情,但它似乎不起作用:

SELECT a.* FROM tableA a
LEFT JOIN TableB b
ON b.aid = a.id
AND b.id IS NULL
WHERE a.status = 1

由于某种原因,这似乎不起作用。由于性能原因,我试图避免子查询。

2 个答案:

答案 0 :(得分:2)

outer join

正如评论中所提到的,joinb.id关键字在MySQL中是相同的。 但是,将WHERE空检查移动到TableB子句会产生影响(在连接后有效地进行检查,而不是作为连接的一部分)。

要解释一下,在您的代码中,数据库正在检查AIDTableA列的值是否与ID中的当前行匹配的行,以及{{1} } {} {}的列值。由于这可能永远不会匹配(假设null中没有TableB列的null值的行,您将无法从{{1}返回数据(每个列都为null)。

在我的代码中,数据库正在检查ID中的一行,其中TableB列值与TableB中当前行的AID列相匹配,并且只有在找不到匹配项的情况下,它才会idTableA中的每一列返回null TableB。 然后,一旦完成,它会检查合并的数据,以查找tableA列为b.id的所有行...实际上只返回{​​{1}}中存在的行在null

中没有相应的(匹配的)行

答案 1 :(得分:-1)

你需要OUTER JOIN:参见所有JOINS:

enter image description here