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

Ste*_*ath 7 sql sql-server join conditional-statements

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

在此输入图像描述

是否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 = '*')
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 8

是否100%确定JOIN中OR语句的第一个条件将首先执行?

不可以.没有保证的评估顺序,即使整个表达式仍然评估为相同的值并且不会影响连接中匹配的行.

您的查询将给出以下结果:

Name       Percentage
---------- -----------
P-A        100
P-A        20
P-A        80
P-B        100
Run Code Online (Sandbox Code Playgroud)

我想你正在寻找这样的东西.

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
Run Code Online (Sandbox Code Playgroud)

您可以使用SQL Server 2008在此处尝试查询.http://data.stackexchange.com/stackoverflow/qt/118492/