Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取不带';在MySQL中没有连接匹配吗?_Mysql_Performance - Fatal编程技术网

如何获取不带';在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关键字是可选的,但是您还是意外地找到了正确的答案。