SQL使用INTERSECT结合子查询无输出的问题排查求助
解决INTERSECT查询无输出的问题
我一眼就看到你SQL里的两个关键问题,这就是导致没有输出的原因:
- 判断普通字符串相等不能用
IS,IS是专门用来判断NULL或者布尔值(比如IS TRUE)的,普通值匹配得用= - 子查询返回单个值时,同样要用
=而不是IS来匹配
修正后的正确代码如下:
SELECT job_id FROM bookjobs WHERE job_id = 'N' INTERSECT SELECT job_id FROM po_items WHERE item_id = (SELECT item_id FROM items WHERE descr = '9KG PAPER');
具体解释下错误点:
job_id IS 'N'的问题:数据库会把字符串'N'当作布尔值解析(多数数据库里非空字符串会被判定为TRUE),所以这行条件其实等价于job_id IS TRUE,完全不符合你想要筛选job_id为'N'的需求,直接导致第一个查询没有返回任何数据,INTERSECT自然也出不了结果。item_id IS (SELECT...)的问题:这里子查询返回的是单个item_id值,同样需要用=来做相等匹配,IS在这里不适用。
修正后,第一个查询会正确筛选出job_id为'N'的记录,第二个查询也能找到对应descr为'9KG PAPER'的item_id关联的job_id,两者的交集就能得到你预期的002结果了。
内容的提问来源于stack exchange,提问作者Floating Tiki Hut
相关产品推荐
相关产品推荐

