在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 = '*')
答案 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