我正在为共享托管环境中的网站做一些工作,该环境有翻转我们设置的历史记录。本周,更新脚本突然停止工作,其根本原因是用于返回结果的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查询的工作方式?
感谢。
答案 0 :(得分:5)
答案 1 :(得分:1)
你可能在entry_id的至少一行中有一个NULL值 使用LEFT JOIN或NOT EXISTS代替