Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql NOT IN嵌套子查询返回空集,因此没有联接结果_Mysql_Select - Fatal编程技术网

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

Mysql NOT IN嵌套子查询返回空集,因此没有联接结果,mysql,select,Mysql,Select,我正在编写一个spring批处理程序,用于查找即将过期的项。工作正常,但我在一次测试中发现了一些问题。这是一个新的批处理程序,它依赖于另一个新表来跟踪已报告的过期项目。例如: 获取供应商通知表中没有条目的即将过期的项目 发送电子邮件 其他业务逻辑 在供应商通知表中创建条目 这是我的sql语句 select * from item join vendor_notification where item.item_id NOT IN(SELECT vendor_notification.ite

我正在编写一个spring批处理程序,用于查找即将过期的项。工作正常,但我在一次测试中发现了一些问题。这是一个新的批处理程序,它依赖于另一个新表来跟踪已报告的过期项目。例如:

  • 获取供应商通知表中没有条目的即将过期的项目
  • 发送电子邮件
  • 其他业务逻辑
  • 在供应商通知表中创建条目
这是我的sql语句

select * from item join vendor_notification 
where item.item_id NOT IN(SELECT vendor_notification.item_id 
FROM vendor_notification);
只要供应商通知表中有数据,该方法就可以正常工作。但是,一旦我重置并清除测试数据,就不会返回任何结果。如果我向vendor_通知表中添加了一行,并向item中添加了一行,那么我将获得该新行


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

如果内部查询返回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;

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

不在
空集应返回所有记录。应删除没有加入条件的加入供应商通知。令人惊讶的是,这是有效的语法。@Martin Smith我不是mySql方面的专家,但我直接针对DB执行上述语句。如果该表是空的,我认为它将为嵌套的select返回一个空集,但它似乎返回null(因为notin也不返回任何内容),这非常有效,谢谢。我知道有更好的方法,只是没看到。请更正第一句。空集合和包含
NULL
的集合之间存在差异。如果结果为零,NOT IN子句将计算为true。我认为OP的实际问题是没有连接条件的
JOIN
会进行交叉连接,并且交叉连接到空表会将行减少到
0
顺便说一句