Left Join 未返回所有行:MySQL 查询问题
在 MySQL 中,LEFT JOIN 操作通常用于组合两个表中的行基于公共密钥。但是,在某些情况下(例如本问题中描述的情况),查询可能不会返回所有预期的行。
查询结构和问题
当 WHERE 时会出现问题子句直接应用于连接条件,如原始查询所示:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
在这种情况下,WHERE 子句限制了join 仅返回 pr7.field = 23 的行。因此,它会排除 jos_hp_properties 表中没有匹配的 pr7.field 条目且值为 23 的行。这会导致查询返回的行数少于预期。
解决方案:移动 WHERE 条件
解决问题并确保要返回第一个表中的所有行,应将 WHERE 条件移至 JOIN 的 ON 条件,如下所示:
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
通过将条件移至 JOIN,查询首先建立左侧表之间进行联接,然后根据指定的条件过滤联接的行。这可确保 jos_hp_properties 表中的所有行都包含在结果集中,无论它们在 jos_hp_properties2 表中是否具有 pr7.field = 23 的匹配条目。
以上是为什么我的 MySQL LEFT JOIN 不返回所有行?的详细内容。更多信息请关注PHP中文网其他相关文章!