2016-04-15 128 views
0

我有這個表過濾器,其中條件

User  | SecretId | Status 
warheat1990 |  NULL | REV 
warheat1990 |  NULL | COM 
warheat1990 |  1 | REV 
warheat1990 |  1 | COM 

我想篩選出的數據(狀態= 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 

那麼,如何排除數據與狀態= REV,但只有當的SecretID IS NOT NULL

我覺得自己很蠢,我無法弄清楚這個簡單的例子。任何幫助將不勝感激。

+0

在您預期的結果不應該最後一行是'warheat1990 | 1 | REM'? – dotnetom

回答

6

我認爲你應該使用或在您的SQL:

SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' OR SecretId IS NULL) 

這裏是數學知識:你想匹配的條件「沒(A和B)」,那麼你可以使用同樣的表達式( (不是A)或(不是B)),所以你應該使用OR而不是AND。

3

所以,你想去的地方Status <> 'REV'ORSecretId IS NULL返回數據:

SELECT * 
FROM TABLE 
WHERE User = 'warheat1990' AND 
    (Status <> 'REV' OR SecretId IS NULL) 

當您使用AND你只有那些滿足兩個條件行。當您使用OR時,您將獲得至少符合一個條件的行。

2

所以你想要選擇除((Status = REV和SecretId IS NOT NULL)除外)?

我們:NOT(狀態= REV和的SecretID IS NOT NULL)< =>(狀態<> REV或的SecretID IS NULL)

SELECT * FROM TABLE WHERE User = 'warheat1990' AND (Status <> 'REV' or SecretId IS NULL)