左连接Cities表时,筛选大城市及无城市记录人员的SQL条件问题
解决方案
正确的SQL语句如下:
SELECT * FROM People p LEFT JOIN Cities c ON c.CityID = p.PCityID WHERE c.Size = 'Large' OR c.CityID IS NULL;
错误写法分析
- 写法一问题:左连接后,无关联City记录的行中
c.Size为NULL,NULL = 'Large'的判断不成立,导致这类行被过滤,不符合需求。 - 写法二问题:把
c.Size='Large'放在连接条件里,只会限制匹配的City数据,但不会过滤People记录——关联到非Large城市的人员依然会被保留(仅City字段为NULL),无法达到筛选目的。
正确逻辑说明
左连接会保留所有People记录,后续通过WHERE条件筛选两类目标数据:
- 成功匹配到
Size='Large'的City记录; - 未匹配到任何City记录(通过
c.CityID IS NULL判断)。
这样就能精准得到你需要的结果:仅包含居住在Large城市的人员,以及无关联City记录的人员。
内容的提问来源于stack exchange,提问作者David Fingerhut
相关产品推荐
相关产品推荐

