我有这张桌子
User | SecretId | Status
warheat1990 | NULL | REV
warheat1990 | NULL | COM
warheat1990 | 1 | REV
warheat1990 | 1 | COM
我想过滤掉数据(Status = REV和SecretId IS NOT NULL合并),所以最终结果将是
User | SecretId | Status
warheat1990 | NULL | REV
warheat1990 | NULL | COM
warheat1990 | 1 | COM
我的查询
SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' AND SecretId IS NULL)
但它不起作用,因为它只给我这条行。
User | SecretId | Status
warheat1990 | NULL | COM
那么我如何排除Status = REV的数据,但仅当SecretId IS NOT NULL
时我觉得我无法弄清楚这个简单的案例。任何帮助将不胜感激。
答案 0 :(得分:6)
我认为你应该在你的SQL中使用OR:
SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' OR SecretId IS NULL)
这是数学知识:你想匹配条件“不(A和B)”,那么你可以使用等效表达式((不是A)或(不是B)),所以你应该使用OR而不是AND。
答案 1 :(得分:3)
因此,您希望返回Status <> 'REV'
或 SecretId IS NULL
的数据:
SELECT *
FROM TABLE
WHERE User = 'warheat1990' AND
(Status <> 'REV' OR SecretId IS NULL)
使用AND
时,只能获得满足这两个条件的行。当您使用OR
时,您将获得至少符合一个条件的行。
答案 2 :(得分:2)
所以你想要选择all,除了(Status = REV和SecretId IS NOT NULL)?
我们有:NOT(Status = REV和SecretId IS NOT NULL)&lt; =&gt; (状态&lt;&gt; REV或SecretId为空)
SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' or SecretId IS NULL)