在一些項目中找到的遺留代碼中進行重構。這是針對MSSQL的。問題是,我無法理解爲什麼我們要使用混合的左右連接並將一些連接條件整理在一起。混合左右連接?爲什麼?
我的問題是這樣的:這不是在某些地方創建隱式內部聯接而是在其他地方隱式完全聯接?
我,幾乎任何東西都可以使用被寫入學校剛剛離開(和內/全)或恰到好處(和內/全),但是那是因爲我喜歡讓事情變得簡單,其中可能的。
順便說一句,我們把所有這些東西對Oracle數據庫的工作一樣,所以也許有與奧拉工作方式不同的一些優化規則?
舉例來說,這裏是從查詢的一個組成部分:
FROM Table1
RIGHT OUTER JOIN Table2
ON Table1.T2FK = Table2.T2PK
LEFT OUTER JOIN Table3
RIGHT OUTER JOIN Table4
LEFT OUTER JOIN Table5
ON Table4.T3FK = Table5.T3FK
AND Table4.T2FK = Table5.T2FK
LEFT OUTER JOIN Table6
RIGHT OUTER JOIN Table7
ON Table6.T6PK = Table7.T6FK
LEFT OUTER JOIN Table8
RIGHT OUTER JOIN Table9
ON Table8.T8PK= Table9.T8FK
ON Table7.T9FK= Table9.T9PK
ON Table4.T7FK= Table7.T7PK
ON Table3.T3PK= Table4.T3PK
RIGHT OUTER JOIN (SELECT *
FROM TableA
WHERE (TableA.PK = @PK)
AND (TableA.Date BETWEEN @StartDate
AND @EndDate)
) Table10
ON Table4.T4PK= Table10.T4FK
ON Table2.T2PK = Table4.T2PK
我不得不承認這讓我生病看看!通過所有手段轉換爲所有左連接。 – HLGEM 2009-07-21 21:51:48
我只是吐在我的嘴裏 – dotjoe 2009-07-21 22:04:46
我很抱歉將所有的表名轉換爲TableX。我有一個預感,這是由一個仍然在這裏工作的人寫的,我不確定她是否讀取了stackoverflow,雖然從你的評論中判斷你是多麼的無情,但我對此表示懷疑。 – Beta033 2009-07-21 22:35:25