我正在编写一个春季批处理程序,正在寻找即将到期的项目。工作正常,但我注意到我的一个测试中出了问题。这是一个新的批处理程序,它依赖于另一个新表来跟踪它报告的过期项目。例如:
这是我的sql声明
select * from item join vendor_notification
where item.item_id NOT IN(SELECT vendor_notification.item_id
FROM vendor_notification);
只要vendor_notification表中有数据,哪个工作正常。但是,一旦我重置并清除测试数据,就不会返回任何结果。如果我在vendor_notification表中添加一行,并在项目中添加新行,那么我确实会获得该新行。
是否有更好的方法来执行上述查询,以便为嵌套查询处理空的返回集?
答案 0 :(得分:3)
如果内部查询返回null,则NOT IN子句将计算为false。
select * from item
where (SELECT count(vendor_notification.item_id)
FROM vendor_notification WHERE vendor_notification.item_id = item.item_id) = 0;
内部查询现在返回匹配记录的计数,如果没有,则为零。