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)
是否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/