MySQL“Not IN”查询突然停止返回结果

时间:2009-06-17 13:17:05

标签: php mysql

我正在为共享托管环境中的网站做一些工作,该环境有翻转我们设置的历史记录。本周,更新脚本突然停止工作,其根本原因是用于返回结果的NOT IN子句不再这样做。

查询的本质是:

SELECT  *
FROM db1.entry
where entry_id not in
(
  select entry_id from db2.content
)

我可以通过直接检查两个表来验证是否确实存在应该返回的记录。运行以下两个查询时,第一个查询返回第二个查询的entry_ids:

SELECT  *
FROM db1.entry 
order by entry_id desc

SELECT  *
FROM db2.content
order by entry_id desc

要重新进行迭代,这几个月都能正常工作。没有进行任何代码更改,但是MySQL设置可能在此过程中发生了变化。在PHP环境中也可能发生了某些变化,但这似乎不太可能,因为当从phpMyAdmin运行时,有问题的查询以与从实时站点运行时相同的方式失败。

当然,它仍然可以在我的开发盒上完美运行。

实际网站正在运行MySQL 4.1.11版。我的问题是,是否有人知道该版本的MySQL设置会改变这些NOT IN查询的工作方式?

感谢。

2 个答案:

答案 0 :(得分:5)

确保您的内部查询不会返回NULL

来自documentation

  

要符合SQL标准,IN不仅会返回NULL,而且如果左侧的表达式为NULL,还会发现NULL列表和列表中的一个表达式是{{1}}。

答案 1 :(得分:1)

你可能在entry_id的至少一行中有一个NULL值 使用LEFT JOIN或NOT EXISTS代替