如何获取不带';在MySQL中没有连接匹配吗?
如何查询一个表并只返回联接表中没有记录的结果 我尝试过类似的方法,但似乎不起作用:如何获取不带';在MySQL中没有连接匹配吗?,mysql,performance,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 出于某种原因,这似乎不起作用。由于性能原因,我试图避免子查询 SELECT a.* FROM tableA a LEFT JOIN TableB b ON b.aid = a.id WHERE a.status = 1
SELECT a.* FROM tableA a
LEFT JOIN TableB b
ON b.aid = a.id
AND b.id IS NULL
WHERE a.status = 1
出于某种原因,这似乎不起作用。由于性能原因,我试图避免子查询
SELECT a.*
FROM tableA a
LEFT JOIN TableB b
ON b.aid = a.id
WHERE a.status = 1 AND b.id IS NULL
正如评论中提到的,outerjoin
和join
关键字在MySQL中是相同的。
但是,将b.id
null检查移动到WHERE
子句将产生不同(实际上是在联接之后进行检查,而不是作为联接的一部分)
为了解释,在代码中,数据库正在检查TableB
中的一行,该行的AID
列值与TableA
中的当前行相匹配,并且ID
列值为null
。由于这可能永远不会匹配(假设TableB
中没有行具有ID
列的null
值),因此将不会有从TableB
返回的数据(每一列都将为null)
在我的代码中,数据库正在检查TableB
中的一行,该行的AID
列值与TableA
中当前行的id
列相匹配,并且只有在未找到匹配项的情况下,它才会为TableB
中的每一列返回null
。
然后,一旦完成,它将检查组合数据以查找
b.id
列为null
的任何行。。。有效地只返回表a
中存在的、在表B
中没有对应(匹配)行的行。您需要外部联接:请参阅所有联接:
b.id为空
需要在WHERE
子句中,而不在条款的中。左连接与左外连接相同。在SQLYes中,OUTER关键字是可选的,但是您还是意外地找到了正确的答案。