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
)
我有一个 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
)