SQL:JOIN中OR语句的第一个条件总是先执行?

时间:2011-11-21 07:51:50

标签: sql sql-server join conditional-statements

在SQL Server中,我有以下设计:

enter image description here

是否100%确定首先执行JOIN中OR语句的第一个条件?那么以下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 个答案:

答案 0 :(得分:8)

  

是否100%确定来自OR语句的第一个条件   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 :(得分:1)

Mikael的回答是正确的,但这个修改版的查询更简洁:

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