左连接的条件

时间:2014-10-17 05:42:55

标签: mysql join

我正在尝试以下查询,其中表B为空并且在TABLEA中记录

--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'

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

1 个答案:

答案 0 :(得分:0)

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

然后解决方案是在连接本身中包含任何此类条件。在上面的示例中,这就像将WHERE更改为AND一样简单。

必须放在WHERE子句中的一个条件是对NULL的测试,即所谓的排除连接 - 即。当你真的想要返回逆集时。