SQL - 与或组合

SQL - AND OR combination

这个查询有效

SELECT *
FROM ALL
WHERE Date >= '2017-04-04 00:00:00'
AND
CONFIDENCE <> 'Discarded'
AND 
CONTEXT <>'Home'

我希望能够说: 并且 (CONTEXT <> 'Home') OR (CONTEXT = 'Hospital' AND LOCAL = 1)

这样我就可以select所有记录 要么从 2017 年 4 月开始,不丢弃,上下文不等于 home

从 2017 年 4 月开始,不丢弃,或者上下文 = hospital 和 local = 1。

我正在使用 ArcGIS。 我试过这个:

"DATE_ENTER"  >= date '2017-04-04 00:00:00'
AND
"CONFIDENCE" <> 'Discarded'
AND 
(
("CONTEXT" <> 'Home address') OR ("CONTEXT" = 'Hospital' AND "LOCAL" = 1)
)

但仍有 Context = Hospital 和 Local = 0 的记录

我测试的时候

 ("CONTEXT" <> 'Home address') 

("CONTEXT" = 'Hospital' AND "LOCAL" = 1)

单独使用,它可以工作,我无法将两者结合起来提供我需要的东西。

我看过这个

第一。

我想你真的想要:

WHERE Date >= '2017-04-04' AND  -- time component is unnecessary
      CONFIDENCE <> 'Discarded' AND 
      CONTEXT <> 'Home' AND
      (NOT (CONTEXT = 'Hospital' AND LOCAL = 1) )

CONTEXT = 'Hospital'时,则不等于'Home'。所以,它仍然符合 CONTEXT.

的条件

我觉得条件应该是这样的:

...
AND 
(
   ("CONTEXT" <> 'Home address' AND "CONTEXT" <> 'Hospital') 
   OR ("CONTEXT" = 'Hospital' AND "LOCAL" = 1)
)

当您使用 ("CONTEXT" <> 'Home address') OR ("CONTEXT" = 'Hospital' AND "LOCAL" = 1) 时,由于第一个条件 "CONTEXT" <> 'Home address'

,您得到的结果 But there are still records with Context = Hospital and Local = 0 是正确的
(CONTEXT NOT IN('Hospital' , 'Home') OR (CONTEXT = 'Hospital' AND LOCAL= 1))
WHERE Date >= '2017-04-04' AND  -- time component is unnecessary
  CONFIDENCE <> 'Discarded' AND 
  CONTEXT <> 'Home' AND NOT(CONTEXT = 'Hospital' AND LOCAL = 0) 

有效

一样
    WHERE Date >= '2017-04-04' AND  -- time component is unnecessary
              CONFIDENCE <> 'Discarded' 
AND
    (
       ("CONTEXT" <> 'Home address' AND "CONTEXT" <> 'Hospital') 
       OR ("CONTEXT" = 'Hospital' AND "LOCAL" = 1)
    )