Применить ИЛИ условие для вложенных и условия - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь понять, как условие [ИЛИ] будет работать с вложенными и условными условиями.

Ниже приведен мой пример запроса

select * from t1 as a join t2 as b  on a.id=b.id
where (a.value > 110 and a.value <= 120)
  OR
     (a.value > 120 and b.age > 20 and b.status='A')

Будет ли приведенное выше утверждение применять условие ИЛИ кзавершите первый (a.value> 110 и a.value <= 120) и второй (a.value> 120 и b.age> 20 и b.status = 'A'), иначе будет применено условие ИЛИ к a.value <= 120 и a.value> 120

Может кто-нибудь, пожалуйста, помогите понять, так как я новичок в sql, это немного сбивает с толку ???

Цените ваше время и помощь: -)

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Если вы используете круглые скобки, ответ ясен, так как сначала содержание этих скобок оценивается, чем OR между ними.

Как и в Приоритет условия Oracle AND заказано до OR вы можете даже снять скобки, чтобы получить тот же эффект - см. пример ниже (упрощенный, чтобы сосредоточиться на точке).

with cnt as (
select rownum id from dual connect by level <= 10)
select * from cnt where
(id > 3 and id <= 5) or (id >= 7 and id < 10);

        ID
----------
         4
         5
         7
         8
         9

with cnt as (
select rownum id from dual connect by level <= 10)
select * from cnt where
id > 3 and id <= 5 or id >= 7 and id < 10;         

        ID
----------
         4
         5
         7
         8
         9 

Требуются скобки,если вы хотите установить приоритет OR над AND, как в примере ниже

(id < 3 or id < 7) and id > 1 

Если вы удалите скобки, вы получите результат из этого предиката:

id < 3 or (id < 7 and id > 1)  

HTH

0 голосов
/ 19 июня 2019

запрос будет возвращать данные из любого из сложных условий внутри скобки s true

    let say c1= (a.value > 110 and a.value <= 120) 
    Or 
    c2=(a.value > 120 and b.age > 20 and b.status='A')

, поэтому, если c1 или c2 - истина, запрос будет восстановлен, но запрос не будет возвращен, если оба значения c1 и c1 - false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...