0

我有两个疑问:

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; 

告诉我这两个 sql 查询是否相等?

4

1 回答 1

1

从逻辑的角度来看,是的,它们是相同的。

然而,一些 DBMS 对公用表表达式(第一个查询)和派生表(第二个查询)应用不同的优化策略。

如果您在限制 CTE 内行的“外部”查询中添加了 where 条件,则它可能不会被下推到 CTE 中,因此可能会产生不同的执行计划。

但这取决于所使用的 DBMS(以上至少对于 Postgres 是正确的,我认为是 Oracle。我不知道例如 DB2、SQL Server 或其他 DBMS)。

于 2013-09-10T09:15:22.560 回答