代码之家  ›  专栏  ›  技术社区  ›  Jonathan Allen

T-SQL:关于不在的问题

  •  1
  • Jonathan Allen  · 技术社区  · 14 年前

    为什么这些查询会返回不同的结果:

    SELECT * 
      FROM ProjectStatus PS 
     WHERE 0 = (SELECT COUNT(*) 
                  FROM Project P 
                 WHERE P.ProjectStatusKey = PS.ProjectStatusKey)
    
    SELECT * 
      FROM ProjectStatus PS 
     WHERE PS.ProjectStatusKey NOT IN (SELECT P.ProjectStatusKey 
                                         FROM Project P)
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Jonathan Allen    14 年前

    呃。结果是选项列表中的空值破坏了整个该死的事情。您必须关闭ansi nulls或将查询更改为…

    SELECT * FROM ProjectStatus PS WHERE 
        PS.ProjectStatusKey NOT IN (SELECT P.ProjectStatusKey FROM Project P WHERE P.ProjectStatusKey IS NOT NULL)
    
        2
  •  0
  •   Joe Stefanelli    14 年前

    如果您的project.projectstatusky值为空,则 NOT IN 子句的计算结果也将为空,而不是真/假。