代码之家  ›  专栏  ›  技术社区  ›  Jason Kester

mysql“not in”查询突然停止返回结果

  •  1
  • Jason Kester  · 技术社区  · 16 年前

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

    查询的本质是:

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

    我可以通过直接检查这两个表来验证是否确实有需要返回的记录。当运行以下两个查询时,第一个查询返回条目ID,第二个查询不返回条目ID:

    SELECT  *
    FROM db1.entry 
    order by entry_id desc
    
    SELECT  *
    FROM db2.content
    order by entry_id desc
    

    再重复一遍,这一切都正常工作了几个月。没有对代码进行任何更改,但可能一路上MySQL设置发生了更改。在PHP环境中也可能发生了一些变化,但这似乎不太可能,因为当从phpmyadmin运行时,所讨论的查询失败的方式与从活动站点运行时相同。

    当然,它在我的开发盒上仍然工作得很好。

    Live网站正在运行MySQL4.1.11版。我的问题是,是否有人知道该版本的MySQL设置会改变这些查询中不工作的方式?

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Quassnoi    16 年前

    确保内部查询不返回 NULL s。

    documentation :

    遵守 SQL 标准, IN 收益率 无效的 不仅当左手边的表达式是 无效的 ,但如果在列表中找不到匹配项,并且列表中的一个表达式是 无效的 .

        2
  •  1
  •   SQLMenace    16 年前

    您可能在至少一行中有一个空值作为条目\u id 使用左联接或不存在