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

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

Barbara Streisand
Barbara Streisand原创
2024-12-13 14:11:10443浏览

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

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