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

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

Barbara Streisand
发布: 2024-12-22 13:22:14
原创
974 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板