在SQL Server中,我下面的設計:
SQL:JOIN中OR語句中的第一個條件總是首先執行?
是不是100%肯定是從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 = '*')
在SQL Server中,我下面的設計:
SQL:JOIN中OR語句中的第一個條件總是首先執行?
是不是100%肯定是從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 = '*')
是可以肯定的,從OR語句在 的首要條件JOIN將首先執行100%?
不。沒有確定的評估順序,即使整個表達式仍然評估爲相同的值,並且不會影響連接中匹配的行。
您的查詢將會給這個結果:
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/
的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
這將在很大程度上取決於你的數據庫。強大的數據庫,如Oracle,DB2,SQL Server將會優化(考慮索引,直方圖,約束等)。這是關於什麼數據庫? –
它是SQL Server(更新的問題) –
'a或b'和'b或a'表示三元布爾邏輯中的相同。你爲什麼想要加入過濾掉'P-A | 100',因爲連接條件對於下面的行是正確的? – Benoit