我已經「繼承了」一個超過10年曆史的應用程序,並且它確實有時顯示其年齡。我今天偶然發現了一個非常奇怪的視圖定義 - 我似乎無法理解它!你可以幫我嗎?這是最初在SQL Server 7.0上,並已被遷移到SQL Server 2005 - 但顯然它從來沒有被重構/重做....奇怪的SQL Server視圖定義
這是視圖定義 - 基於一堆表和另一個視圖:
CREATE VIEW dbo.MyOddView
AS
SELECT
t1.MVOID, t1.SomeOtherColumn,
t2.Number ,
t3.OID, t3.FKOID,
t4.AcctNo,
t5.ShortDesc, t5.ZipCode, t5.City,
t6.BankAcctNo
FROM
dbo.viewFirst vf
INNER JOIN
dbo.Table1 t1 ON vf.MVOID = t1.MVOID AND vf.ValidFrom = t1.ValidFrom
LEFT OUTER JOIN
dbo.Table2 t2
RIGHT OUTER JOIN
dbo.Table3 t3 ON t2.OID = t3.FKOID
LEFT OUTER JOIN
dbo.Table4 t4 ON t3.ZVOID = t4.OID
LEFT OUTER JOIN
dbo.Table5 t5
INNER JOIN
dbo.Table4 t6 ON t5.OID = t6.BCOID
ON t4.ZVOID = t5.OID
ON t2.AddressOID = t4.OID
GO
什麼我不明白是兩個在視圖定義的末尾加入哪個沒有連接條件旁列出他們的(對於Table2 t2
和Table5 t5
),以及兩個額外的ON
條件 - 我不能似乎撕裂了這個分開,並把它放回到合適的ANSI JOIN語法中,這樣我的行數就是一樣的......(我的原始視圖使我獲得了超過12000行的行數,並且第一次嘗試a t重構這個返回單行......)
任何想法?這是什麼?看起來像完全無效的SQL對我來說 - 但它似乎在做它的工作(並且一直在過去幾年....)任何想法?指針?
我認爲你的答案在[本文](http://www.sqlmag.com/article/tsql3/take-control-of-joins)中有介紹。 –
@Martin Smith:感謝您提供的信息豐富的鏈接!是的,確實如此 - 這似乎就是這種情況。我從來沒有見過這樣做 - 我有10多年的SQL Server暴露.... sheesh!你每天都會學到一些東西! –
不,也不是我。它可以與'OPTION(FORCE ORDER)'一起使用來創建濃密的計劃,但不是我到目前爲止嘗試過的東西。 –