2016-11-06 8 views
3

に、私はシンプルな、次のクエリのロジックを理解しようとしている:IV」また、私はサブクエリについて読んだ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) 
    ) 

私は関連する質問を私のように探していましたが、私は明確な答えを見つけませんでした。

私の質問は、このクエリの複雑さ(サブクエリの実行回数)を知る方法です。

サブクエリ内の外部クエリのテーブルを使用するため、サブクエリがここでどのように機能するかはわかりません。

+1

パフォーマンスに関しては決定的な答えはありません。それはあなたのインデックス、テーブルサイズなどに基づいて変化する可能性があります。実行計画を実行します。 – sagi

答えて

3

この(ひどい、恐ろしい、良いとても悪いん)クエリは同等です:1または1:テーブル間の関係が1である場合

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

Nその後、理論上の複雑さはO(n)があります。
実際の複雑さは、データベース/データ構造/統計に依存します。

+0

右すぐには分かりませんが、サブクエリの 'source_code'が' t3.source_code in(t1)によって決定される単一の値を持つので、max()は元のクエリでは全く役に立たないということを強調することは良いでしょう。 .code_value) '条件 – Insac

+0

@Insacですが、サブクエリ全体が役に立たなくなります。:-)私は本当に、これが現実のコードではないことを本当に願っています。 –

+0

私はあなたの希望を共有します:-) – Insac

関連する問題