Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Join - Fatal编程技术网

Mysql 关于左连接的条件

Mysql 关于左连接的条件,mysql,join,Mysql,Join,我正在尝试下面的查询,其中表B为空,记录在表A中 --This query fetched no records SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA LEFT JOIN TABLEB ON TABLEA.ID=TABLEB.ID WHERE TABLEB.COL1<>'XYZ' --This query fetched records . SELECT COL1 FROM ( SELECT TABLEA.COLA,TABLEA

我正在尝试下面的查询,其中表B为空,记录在表A中

--This query fetched no records
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN  TABLEB
ON TABLEA.ID=TABLEB.ID
WHERE TABLEB.COL1<>'XYZ'

--This query fetched records .
SELECT COL1 FROM 
(
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN  TABLEB
ON TABLEA.ID=TABLEB.ID
)A WHERE COL1 <>'XYZ'

你能帮我解释一下为什么第一个查询没有返回任何记录,尽管它们看起来一样。我对第一个查询的理解是我做了一个左连接,所以如果表B中不存在记录,应该用空值替换它。作为NULL'xyz',所有记录都应正确提取

在外部联接的外部联接表上放置WHERE条件可以有效地将该联接呈现为内部联接。因此,如果外部表中没有满足条件的行,则不会返回任何行

然后,解决方案是在联接本身中包含任何此类条件。在上面的示例中,这与更改到和的位置一样简单

必须放在WHERE子句中的一个条件是对NULL的测试,即所谓的排除联接,即当您实际想要返回逆集合时