MySQL LEFT JOIN查询问题:需返回所有socials行及site_id=1的关联数据
解决方法
你的问题出在WHERE子句的位置:当使用LEFT JOIN后在WHERE中过滤social_links.site_id=1,会直接排除social_links表中无匹配(或site_id不为1)的行,最终只返回2行。
正确的做法是将site_id=1的条件放到LEFT JOIN的ON子句中,这样既能保留socials表的所有行,又只关联符合site_id=1的social_links数据:
SELECT socials.*, social_links.* FROM socials LEFT JOIN social_links ON socials.id = social_links.social_id AND social_links.site_id = 1
结果说明
执行这段SQL后会得到4行结果:
- Facebook、Instagram会关联到site_id=1的链接数据
- Linkedin、Messenger对应的social_links字段会显示为NULL,符合你保留所有socials行的需求
原代码问题解析
原代码中,LEFT JOIN先返回所有socials行,再通过WHERE过滤social_links.site_id=1,但无匹配site_id=1的行中social_links.site_id为NULL,NULL与1的比较不成立,因此被过滤,最终仅留下2行。
内容的提问来源于stack exchange,提问作者khalid seleem
相关产品推荐
相关产品推荐

