左连接未返回所有行
原始问题:
涉及左外连接仅返回一行,而不是主表中的所有行。连接条件包括对辅助表中的字段的过滤器。如何选择主表中的所有行,包括辅助表中字段满足过滤条件的值?
解决方案:
问题源于将 WHERE 条件放在 JOIN 之后。通过将其移至 JOIN 子句本身,查询可确保联接仅匹配满足过滤条件的行。这是修改后的查询:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
在此查询中,WHERE 条件不再位于 JOIN 之后的单独 WHERE 子句中。相反,它已合并到 JOIN 的 ON 子句中,确保仅连接 pr7.field 为 23 的行。这允许选择 jos_hp_properties 中的所有行,包括那些在 jos_hp_properties2 中没有匹配的行,其中 pr7.value 将为 NULL 值。
以上是为什么我的 MySQL LEFT JOIN 只返回一行而不是主表中的所有行?的详细内容。更多信息请关注PHP中文网其他相关文章!