war*_*990 0 sql sql-server sql-server-2012
我有这张桌子
User | SecretId | Status
warheat1990 | NULL | REV
warheat1990 | NULL | COM
warheat1990 | 1 | REV
warheat1990 | 1 | COM
Run Code Online (Sandbox Code Playgroud)
我想过滤掉数据(Status = REV和SecretId IS NOT NULL合并),所以最终结果将是
User | SecretId | Status
warheat1990 | NULL | REV
warheat1990 | NULL | COM
warheat1990 | 1 | COM
Run Code Online (Sandbox Code Playgroud)
我的查询
SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' AND SecretId IS NULL)
Run Code Online (Sandbox Code Playgroud)
但它没有用,因为它只给了我这条ROW.
User | SecretId | Status
warheat1990 | NULL | COM
Run Code Online (Sandbox Code Playgroud)
那么如何使用Status = REV排除数据,但仅当SecretId不为NULL时才排除数据
我觉得愚蠢,我无法弄清楚这个简单的案例.任何帮助将不胜感激.
小智 6
我认为你应该在你的SQL中使用OR:
SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' OR SecretId IS NULL)
Run Code Online (Sandbox Code Playgroud)
这是数学知识:你想匹配条件"不(A和B)",那么你可以使用等价表达式((不是A)或(不是B)),所以你应该使用OR而不是AND.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |