SQL 过滤掉符合所有条件的行

SQL filter out where rows match ALL criteria

我有一个 table,我必须在其中做一个 select 声明。 table 包含 1,616,372 个值,我需要确保其中 5,177 个值不会显示在基于某些过滤器的 select 语句中。

我做了一个 select 声明,其中 returns 我需要过滤掉的所有值:

SELECT  
[EntryNo] 
,[AccountNo] 
,[CompanyNo] 
,[Description] 
,[Date] 
,[Code] 
FROM dbo.Table 
WHERE CAST([Date] AS Time) = '23:59:59.0000000' 
AND [Code] <> 'x' 
AND YEAR([Date]) = 2020

这给了我需要过滤掉的 5,177 行。

但是当我创建一个 SELECT * FROM xxx 并添加与您在此处看到的内容相反的 WHERE 子句时,它会过滤掉匹配任何条件而不是所有条件的行。

SELECT * FROM dbo.Table 
WHERE CAST([Date] AS Time) <> '23:59:59.0000000' 
AND [Code] <> 'x' 
AND YEAR([Date]) <> 2020

我试过在条件周围加上各种括号,但我无法让它发挥作用,因此它只能过滤掉 5,177 行。

这些行没有任何特定的 ID,因为它们处于暂存状态 table,使它们与众不同的是 [EntryNo] 和 [CompanyNo] 的组合。

希望能帮到你

您在第二个查询中没有正确否定条件,and 应该变成 or(根据 DeMorgan's theorem

或者,您可以将所有内容包装在否定中,让 SQL 完成工作,而不是手动执行:

WHERE NOT(
    CAST([Date] AS Time) = '23:59:59.0000000' 
    AND [Code] <> 'x' 
    AND YEAR([Date]) = 2020
)