MySQL关联空表问题:LEFT JOIN空表返回空集的结果修正需求
你的SQL查询问题分析与解决办法
嘿,我来帮你捋捋这个问题哈!你现在遇到的情况是:a表是空的,b表有id=50的数据,但用LEFT JOIN查询却返回空集,而你期望得到一行null | 50的结果。
为啥原查询不行?
问题出在LEFT JOIN的逻辑和你的WHERE条件上:
LEFT JOIN是以左表(也就是a表)为核心,只有当左表存在匹配的行时,才会关联右表的数据。现在a表是空的,连一行数据都没有,那整个查询自然就没有结果返回了。- 再加上
WHERE a.something = 'something'这个条件,因为a表根本没有行,这个条件根本没法匹配,直接坐实了空结果。
两种解决办法
办法1:直接从b表查询(最简单直接)
如果你的需求就是“不管a表有没有数据,只要b表有id=50的行,就返回一行a.id为null、b.id为50的结果”,那完全可以跳过JOIN,直接查b表同时指定a.id的取值:
SELECT NULL AS `a.id`, b.id FROM b WHERE b.id = 50;
办法2:改用RIGHT JOIN并调整条件(保留JOIN结构)
如果你想保留JOIN的写法,那可以把b表作为主表,用RIGHT JOIN,同时注意不要让a表的条件过滤掉b表的行:
SELECT a.id, b.id FROM a RIGHT JOIN b ON b.id = 50 AND a.something = 'something';
这里把a.something = 'something'放到ON子句里,而不是WHERE里,这样只会匹配a表中符合条件的行,但不会因为a表为空就过滤掉b表的行。如果a表以后有符合条件的数据,也能正常关联返回;如果a表还是空的,就会返回b表的行,a.id显示为null。
内容的提问来源于stack exchange,提问作者Lipau3n
相关产品推荐
相关产品推荐

