【问题标题】:SQL Server query include null in where clauseSQL Server 查询在 where 子句中包含 null
【发布时间】:2015-04-21 13:43:06
【问题描述】:

我有以下格式的表格。我正在尝试查询此表以获取所有不是 PC 和 PT 的记录。

所以我的查询应该返回 ID 3,4,5,6,7 并且应该忽略 1 和 2

    CREATE TABLE #t (ID INT, V VARCHAR(16))

    INSERT  INTO #t
    VALUES  (1, 'PC'),
            (2, 'PT'),
            (3, NULL),
            (4, NULL),
            (5, NULL),
            (6, 'PS'),
            (7, 'PD');

drop table #t

我使用的查询只返回 6 和 7 并忽略结果集中的空记录。:

select 
    id, v 
from 
    #t 
where  
    v != 'PC' and V != PT

请告诉我应该怎么做才能在我的结果集中包含 null?

【问题讨论】:

  • WHERE 子句中添加OR V IS NULL
  • 只使用 NOT IN ('PC', 'PT')。它将返回除 PC 和 PT 之外的所有行
  • @PareshJ - NOT IN ('PC','PT') 也将排除 NULL 记录。
  • 是的,应该不在('PC','PT')或者v为空

标签: sql-server where


【解决方案1】:

您的查询也应该检查空条件。

查询 -

select id , v from #t where  v not in ('PC' , 'PT') OR v is null

【讨论】:

    【解决方案2】:
    select id , v from #t where  v!='PC' and V!=PT or OR V IS NULL
    

    一切都好。请也添加空条件

    select id , v from #t where  v not in ('PC' , 'PT') and v is null 
    

    使用not in会返回除PC和PT之外的所有行

    【讨论】:

    • 第一个查询有效,但第二个无效。感谢您的反馈
    • SELECT ID, V FROM #t WHERE ISNULL(V,'') NOT IN ('PC' , 'PT')
    • @ps_prakash02 您的查询最好将其作为答案,否则我将与答案相同
    • 第一个查询不起作用 - 您有两个 OR,并且在没有括号的 where 子句中混合 AND 和 OR 意味着结果将返回错误的结果
    【解决方案3】:

    不是对每个条件都使用!=,而是使用not in,对于处理空值,使用isnull

    select 
      id, v 
    from 
      #t 
    where  
      isnull(v,'') not in ('PC', 'PT')
    

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2021-10-14
      相关资源
      最近更新 更多