Sql不会识别或不满意

时间:2016-07-29 15:38:33

标签: sql db2

我遇到此查询的问题,它不会识别第二个OR条件,我无法识别原因。

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')

此特定OR UCASE(RTRIM(COALESCE(Estado,'C'))) <> 'A')

1 个答案:

答案 0 :(得分:2)

我猜你想要的是:

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')
      )

我猜测前两个条件应该是一个,然后是第二个条件。

第二个布尔表达式具有以下逻辑:

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

这很简单。如果某件事恰好等于'D',那么肯定不等于'A'