0

2 つのクエリがあります。

WITH table1
     AS (SELECT id,
                first  AS table1_first,
                second AS table1_second
         FROM   some_table)
SELECT omt.*,
       t1.*
FROM   one_more_table omt
       INNER JOIN table1 t1
         ON omt.id = t1.id;

SELECT omt.*,
       t1.*
FROM   one_more_table omt
       INNER JOIN (SELECT id,
                          first  AS table1_first,
                          second AS table1_second
                   FROM   some_table) AS t1
         ON omt.id = t1.id; 

この 2 つの SQL クエリは等しいか教えてください。

4

1 に答える 1

1

論理的な観点からは、はい、それらは同一です。

ただし、一部の DBMS は、共通テーブル式 (最初のクエリ) と派生テーブル (2 番目のクエリ) に対して異なる最適化戦略を適用します。

CTE 内の行を制限する「外部」クエリに where 条件を追加すると、CTE にプッシュダウンされず、別の実行計画が生成される可能性があります。

しかし、これは使用されている DBMS によって異なります (上記は少なくとも Postgres には当てはまり、私は Oracle だと思います。たとえば、DB2、SQL Server、または他の DBMS については知りません)。

于 2013-09-10T09:15:22.560 に答える