首页 > 解决方案 > 当第二个表在 WHERE 语句中时,SQL 左连接不返回所有结果

问题描述

我正在尝试将两个表连接在一起,其中第二个表可能没有相关记录。在这种情况下,我希望第一个表中的数据仍然显示。我可以使用 LEFT JOIN 来做到这一点,但我遇到的问题是我在 WHERE 语句中引用了第二个表。

SELECT a.field1, a.field2, b.field2 from a
LEFT JOIN b ON a.id = b.id 
WHERE a.field1 = "value" AND b.field1 = "value" 

似乎因为我在 WHERE 语句中引用了表 b,所以我只获取表 b 中存在相关记录的记录。有没有办法在 WHERE 语句中仍然包含表 b 并仍然从表 a 返回记录,即使表 b 中没有相关记录?

谢谢!

标签: mysqlsqlselectleft-joinwhere-clause

解决方案


left joined 表上的条件移动到连接的on子句中:

SELECT a.field1, a.field2, b.field2 
FROM a
LEFT JOIN b ON a.id = b.id AND b.field1 = 'value'
WHERE a.field1 = 'value' 

当 then在 table中为给定的 tableLEFT JOIN找不到匹配项时,所有列都是,因此不能在子句中满足条件 - 因此从结果集中删除整行。您希望该条件被绑定到。bidabnullb.field1 = 'value'whereleft join


推荐阅读