首页 >数据库 >mysql教程 >为什么我的 MySQL LEFT JOIN 不返回所有行?

为什么我的 MySQL LEFT JOIN 不返回所有行?

Barbara Streisand
Barbara Streisand原创
2024-12-22 13:22:14971浏览

Why Doesn't My MySQL LEFT JOIN Return All Rows?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn