2016-07-29 7 views
0

Im ein Problem mit dieser Abfrage, wird es nicht erkennen, die zweite Bedingung und ich kann nicht erkennen, warum.Sql nicht erkennen oder Bedingung

select * 
from afip_inctascli 
WHERE UCASE(COALESCE(Cliente,'N')) = 'N' OR 
UCASE(Cliente) = 'S' AND 
(TipoCta_Host IS NULL OR 
NroCuenta IS NULL OR 
UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'D' OR 
UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'A') 

Diese spezifische OR UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'A')

Antwort

2

Ich vermute, dass das, was Sie wollen, ist:

WHERE UCASE(COALESCE(Cliente, 'N')) IN ('S', 'N') AND 
     (TipoCta_Host IS NULL OR 
     NroCuenta IS NULL OR 
     UCASE(RTRIM(COALESCE(Estado,'C'))) NOT IN ('A', 'D') 
    ) 

Ich vermute, die ersten beiden Bedingungen sein sollen, gefolgt von der zweiten.

Der zweite Boolesche Ausdruck hat diese Logik:

UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'D' OR 
    UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'A' 

Diese triviale wahr ist. Wenn etwas gleich 'D' ist, dann ist es sicherlich nicht gleich 'A'.