【问题标题】:MYSQL LEFT JOIN not showing Null RowsMYSQL LEFT JOIN 不显示空行
【发布时间】:2018-07-27 21:05:09
【问题描述】:

我有 2 张桌子。 facility_posts 包含所有可用的设施和 properties_amenities 仅包含一个属性设施。 我想运行一个连接查询,如果在 properties_amenities 中找不到行,它将返回来自ities_posts 的所有行,并且为 NULL。

当前查询:

SELECT properties_amenities.*, amenities_posts.type, amenities_posts.grouped, amenities_posts.title, properties_amenities.property_id 
FROM properties_amenities 
LEFT JOIN amenities_posts ON properties_amenities.amenity_id = amenities_posts.id
WHERE properties_amenities.property_id=318 OR properties_amenities.property_id IS NULL 
ORDER BY amenities_posts.grouped DESC, amenities_posts.sortby ASC;

此查询仅返回来自properties_amenities 的行,而不是所有带有空值的便利设施行。

【问题讨论】:

  • 如果你能分享你的表结构会更好。
  • 请发布示例数据和预期结果。
  • 我是堆栈交换的新手,那么发布结构和示例数据的最佳方式是什么?我可以附加 SQL 文件来发布吗?

标签: php mysql


【解决方案1】:

如果你想显示来自便利贴的所有行,它需要在 LEFT JOIN 的 left 一侧。

...
FROM amenities_posts
LEFT JOIN properties_amenities ...

左连接从左侧选择所有行,并且仅从右侧匹配行。

【讨论】:

  • 您能否根据我当前的查询显示您建议的完整查询?
  • 我的建议是将两个表切换到连接的另一侧。据我所知,其余部分看起来还不错。
  • 您好,我尝试切换表,但结果仍然没有显示所有行便利性_帖子,而是仅显示来自属性_便利性的行,其中有来自 on 子句的匹配记录。 (properties_amenities.amenity_id = facility_posts.id) 我用另一种方式解决了这个问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
相关资源
最近更新 更多