sql查询是否与WITH语句不相等?

时间:2013-09-10 09:08:28

标签: sql

我有两个问题:

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查询是否相同?

1 个答案:

答案 0 :(得分:1)

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

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

如果在“外部”查询中添加了where条件,该条件限制了CTE中的行,则可能不会将其下推到CTE中,从而可能产生不同的执行计划。

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