SQL查询无返回结果排查:NOT IN子句问题咨询
问题分析与解决
你的查询存在逻辑错误,并非网站问题。
错误原因
当employees表的building字段包含NULL值时,NOT IN子查询的逻辑会失效。SQL中,任何值与NULL进行比较的结果都是UNKNOWN,而WHERE子句仅保留判断结果为TRUE的行。因此只要子查询返回的集合里存在NULL,building_name NOT IN (...)的判断结果永远不会是TRUE,最终导致查询返回空结果。
正确写法
方法1:使用NOT EXISTS(推荐,处理NULL更可靠)
SELECT * FROM buildings b WHERE NOT EXISTS ( SELECT 1 FROM employees e WHERE e.building = b.building_name )
方法2:在子查询中排除NULL值
SELECT * FROM buildings WHERE building_name NOT IN ( SELECT building FROM employees WHERE building IS NOT NULL )
内容的提问来源于stack exchange,提问作者ChathamsHero
相关产品推荐
相关产品推荐

