SQL: первое условие в операторе OR в JOIN всегда выполняется первым? - PullRequest
7 голосов
/ 21 ноября 2011

В SQL Server у меня есть следующий дизайн:enter image description here

На 100% уверен, что первое условие из оператора OR в JOIN будет выполнено первым?Так что следующий оператор SQL приведет к зеленому результату?

SELECT P.Name, D.Percentage
FROM Personnel P
JOIN Department D ON
  P.Dep_Code = D.Code AND
  (P.SubDep_Code = D.SubCode OR D.SubCode = '*')

Ответы [ 2 ]

8 голосов
/ 21 ноября 2011

100% уверен, что первое условие из оператора ИЛИ в JOIN будет выполняться первым?

Нет. Не существует гарантированного порядка вычисления, и даже если там, где все выражение будет по-прежнему иметь одно и то же значение, это не повлияет на соответствие строк в объединении.

Ваш запрос даст такой результат:

Name       Percentage
---------- -----------
P-A        100
P-A        20
P-A        80
P-B        100

Полагаю, вы ищете что-то подобное.

select P.Name,
       coalesce(D1.Percentage, D2.Percentage) as Percentage
from Personnel as P
  left outer join Department as D1
    on P.Dep_Code = D1.Code and
       P.SubDep_Code = D1.SubCode
  left outer join Department as D2
    on P.Dep_Code = D2.Code and
       D2.SubCode = '*'
where coalesce(D1.Percentage, D2.Percentage) is not null

Вы можете попробовать запросы здесь, используя SQL Server 2008. http://data.stackexchange.com/stackoverflow/qt/118492/

1 голос
/ 21 ноября 2011

Ответ Микаэля верен, но эта исправленная версия запроса более лаконична:

SELECT P.Name, D.Percentage
FROM Personnel P
JOIN Department D 
ON P.Dep_Code = D.Code AND COALESCE(P.SubDep_Code,'*') = D.SubCode
...