2016-11-06 155 views
3

我想了解以下簡單查詢的邏輯:SQL - 使用同一個表的外部查詢和子查詢

select * 
from table1 as t1 cross join table2 as t2 
where t2.source_code = (
    select Max(t3.source_code) 
    from table2 t3 
    where t3.source_code in (t1.code_value) 
    ) 

我讀過有關子查詢,也IV」我一直在尋找一個相關的問題,我還沒有找到明確的答案。

我的問題是如何知道這個查詢的複雜性(子查詢運行多少次)。

我不太確定子查詢是如何工作的,因爲我在子查詢中使用了外部查詢中的表。

+1

當涉及到性能時,從來沒有確定的答案。這可能會根據您的指數,表格大小等而有所不同。運行一個執行計劃。 – sagi

回答

3

這(可怕,可怕,沒有好,非常差)查詢等效於:

select * from table1 as t1 join table2 as t2 on t1.code_value = t2.source_code; 

如果表之間的關係是1:1或1:N,則理論複雜度爲O(n)的。
實際的複雜性是依賴於數據庫/數據結構/統計數據。

+0

對!由於它並不是立即顯而易見的,因此可能有必要強調max()在原始查詢中完全沒有用處,因爲子查詢中的source_code具有一個由t3.source_code in(t1 .code_value)'條件 – Insac

+0

@Insac,但是,然後,整個子查詢是沒用的...... :-)我真的,真的希望這不是一個真實的代碼。 –

+0

我分享你的希望:-) – Insac

相關問題