表 - 查詢有2列(functionId,depFunctionId)如何簡化這個SQL查詢
我想這是無論是在functionid或depfunctionid
我用這所有的值:
select distinct depfunctionid from Query
union
select distinct functionid from Query
如何做得更好?
表 - 查詢有2列(functionId,depFunctionId)如何簡化這個SQL查詢
我想這是無論是在functionid或depfunctionid
我用這所有的值:
select distinct depfunctionid from Query
union
select distinct functionid from Query
如何做得更好?
我認爲這是最好的你會得到。
這就像它得到我認爲...
我幾乎可以肯定,你可以放棄獨特的。 當您使用UNION而不是UNION ALL時,重複的結果將被丟棄。
這一切都取決於你的內聯視圖查詢的重要程度。獲得更好性能的關鍵是隻執行一次,但考慮到它返回的數據,這是不可能的。
如果你不喜歡這樣寫道:
select depfunctionid , functionid from Query
group by depfunctionid , functionid
很可能你會得到重複depfunctionid或functionid結果。
我可能是錯的,但在我看來,你試圖檢索一個依賴關係樹。如果是這種情況,我個人會嘗試使用物化路徑方法。
如果物化路徑存儲在一個自我引用的表名,我將檢索使用的東西樹像
select asrt2.function_id
from a_self_referencig_table asrt1,
a_self_referencig_table asrt2
where asrt1.function_name = 'blah function'
and asrt2.materialized_path like (asrt1.materialized_path || '%')
order by asrt2.materialized_path, asrt2.some_child_node_ordering_column
這將檢索整個樹按正確的順序。什麼是必須基於function_id和parent_function_id構建物化路徑(或者在你的情況下,functionid和depfunctionid),但觸發器可以很容易地處理它。
丟失DISTINCT子句,因爲您的UNION(vs UNION ALL)將負責刪除重複項。
另一種方法 - 但也許不那麼清晰,可能採用相同的執行計劃 - 將在2列中進行FULL JOIN。
SELECT
COALESCE(Query1.FunctionId, Query2.DepFunctionId) as FunctionId
FROM Query as Query1
FULL OUTER JOIN Query as Query2 ON
Query1.FunctionId = Query2.DepFunctionId
有關DISTINCT關鍵字的觀點很好。我擔心的其餘部分沒有提到。最後一個查詢不會編譯 - 選擇列表中的function_id不明確。 – 2009-01-01 19:49:47