NOT IN嵌套子查询返回空集,因此没有连接结果

时间:2014-03-11 17:34:08

标签: mysql select

我正在编写一个春季批处理程序,正在寻找即将到期的项目。工作正常,但我注意到我的一个测试中出了问题。这是一个新的批处理程序,它依赖于另一个新表来跟踪它报告的过期项目。例如:

  • 获取项目即将过期,但在vendor_notification表中没有条目
  • 发送电子邮件
  • 其他业务逻辑
  • 在vendor_notificaton表中创建条目

这是我的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表中添加一行,并在项目中添加新行,那么我确实会获得该新行。

是否有更好的方法来执行上述查询,以便为嵌套查询处理空的返回集?

1 个答案:

答案 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;

内部查询现在返回匹配记录的计数,如果没有,则为零。