2016-04-15 14 views
0

ich diese Tabelle habenFilter, wo unter der Bedingung

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

Ich möchte Daten herauszufiltern, mit (Status = REV und SecretId IS NOT NULL kombiniert) so dass das Endergebnis wird

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

sein My Abfrage

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

aber es funktioniert nicht, weil es mir nur diese ROW gibt.

User  | SecretId | Status 
warheat1990 |  NULL | COM 

Wie schließe ich Daten mit Status = REV aber nur, wenn SecretId IS NOT NULL

Ich fühle mich dumm, dass ich nicht mit diesen einfachen Fall herausfinden können. Jede Hilfe wird geschätzt.

+0

In Ihrem erwartete Ergebnis sollte nicht letzten Reihe 'warheat1990 sein | 1 | REM'? – dotnetom

Antwort

6

Ich glaube, Sie verwenden sollen, oder in Ihrem SQL:

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

Hier sind die mathematischen Kenntnisse: Sie den Zustand „nicht (A und B)“ passen wollen, dann können Sie den äquivalenten Ausdruck verwenden ((nicht A) oder (nicht B)), also sollten Sie OR statt AND verwenden.

3

So möchten Sie Daten zurückzukehren, wo Status <> 'REV'ORSecretId IS NULL:

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

Wenn Sie AND verwenden Sie nur die Zeilen erhalten, die beide Bedingungen erfüllen. Wenn Sie OR verwenden, erhalten Sie die Zeilen, die mindestens einem Kriterium entsprechen.

2

Sie wollen also alle auswählen, außer für (Status = REV und SecretId IST NICHT NULL)?

Wir haben: NOT (Status = REV und SecretId IS NOT NULL) < => (Stand <> REV oder SecretId IS NULL)

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