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