好的 - 我已經有了相當廣泛的SQL Server背景,但是我之前只是在Oracle中弄混了。好吧,推動已經到來,我需要創建一個相對複雜的查詢。本質上,它歸結爲在T-SQL:PL/SQL新手 - 返回多個結果集問題
SELECT Col1
INTO #tmpTable
FROM Table1
WHERE Col3 = @paramValue
SELECT Col1
FROM #tmpTable
SELECT OtherCol
FROM Table2
INNER JOIN #tmpTable
ON Table1.Col1 = Table2.fkCol1
此序列的理由是因爲表1的初始呼叫重於泰山(〜5秒運行時),因爲它是對我們的數據倉庫一個高度複雜的呼叫。我想在單獨的調用中返回Table2的結果,因爲Table1中的每個表可能有5-10個記錄,這使得我的前端旋轉更容易。
我知道,我能做的
SELECT Table1.Col1, Table2.OtherCol
FROM Table1
LEFT JOIN Table2
ON Table1.Col1 = Table2.fkCol1
,然後直到我發現了一個新的再正常化前端(數據處理只爲Col1中的第一條記錄,那麼所有的OtherCol記錄Col1)
雖然我不是數據庫專家,但我不確定哪種方法更好。從開發的角度來看,第一種解決方案對我來說更容易消費。它也(直覺)看起來更高性能,因爲不需要返回Table1耦合到Table2的「厚」結果。表1將返回〜1200行,寬度約爲2kb。表2顯着更爲精簡(〜20字節寬),但具有更多行(6000-12000)。
因此,最終我的問題是,哪種解決方案是最適合PL/SQL環境的解決方案,如果是第一個解決方案,那麼解決這個問題的最佳方法是什麼?全球臨時表/光標/子選擇/什麼?
在第一位代碼中,是否真的從表中選擇Col1,Col1與參數相匹配,還是被簡化了? – 2011-03-17 22:34:13
@Gary Myers:哈哈我想我會改變名字 - 它只是簡單化了。 – JustLoren 2011-03-18 19:49:37