首页 > 数据库 > mysql教程 > 为什么我的 MySQL LEFT JOIN 查询返回的行数少于预期?

为什么我的 MySQL LEFT JOIN 查询返回的行数少于预期?

Barbara Streisand
发布: 2024-12-13 14:11:10
原创
448 人浏览过

Why are My MySQL LEFT JOIN Queries Returning Fewer Rows Than Expected?

解决 MySQL Left Join 中空行的问题

在 MySQL 中,执行 left join 查询时,经常会遇到并非返回左表中的所有行的情况。当在 WHERE 子句而不是 ON 子句中指定联接条件时,就会出现此问题。

考虑以下查询,该查询联接表 jos_hp_properties (pr) 和 jos_hp_properties2 (pr7):

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
登录后复制

正如用户所提到的,尽管第一个表中有 27 行,但该查询仅返回第一个表中的一行jos_hp_properties 表。原因是 WHERE 条件 pr7.field=23 过滤掉了 jos_hp_properties 中与 jos_hp_properties2 表中不具有匹配字段值 23 的所有行。

要解决此问题并检索以下位置的所有行第一个表,包括第二个表中的 room_price_high 值(如果没有匹配字段则为 NULL),WHERE 条件应移至左连接的ON子句:

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 AND pr7.field=23
登录后复制

通过将连接条件放在ON子句中,左连接将保留jos_hp_properties表中的所有行,并且仅根据匹配的字段值过滤jos_hp_properties2表。这可确保返回第一个表中的所有行,即使某些行在第二个表中没有相应的行。

以上是为什么我的 MySQL LEFT JOIN 查询返回的行数少于预期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板