代码之家  ›  专栏  ›  技术社区  ›  Curtis Inderwiesche

何时不适合使用派生表?

  •  5
  • Curtis Inderwiesche  · 技术社区  · 15 年前

    SO post 详细说明了派生表和临时表在性能方面的一些好处。

    每个帖子一个答案加一个例子会很有帮助。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Bill Karwin    14 年前

    我想做一个 自连接

    CREATE TEMPORARY TABLE foo AS SELECT ...;
    
    SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
    

    与使用派生表相比,您必须将整个查询写两次:

    SELECT ... 
    FROM (SELECT ...)
    JOIN (SELECT ...) ON ...conditions...;
    

    但另一个解决办法是 常用表表达式 与派生表略有不同:

    WITH foo AS (SELECT ...)
    SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
    

    如果您使用支持此语法的数据库品牌(Microsoft、Oracle、IBM、PostgreSQL)。

        2
  •  1
  •   dave    14 年前

    范围可能是其中之一。我认为temp表可以被其他事务/进程等访问。派生表仅限于声明它们的块。

        3
  •  1
  •   Bill Karwin    14 年前

    多个查询

    CREATE TEMPORARY TABLE foo AS SELECT ...;
    
    SELECT ... FROM foo WHERE ...conditions...;
    
    -- sometime later
    
    SELECT ... FROM foo WHERE ...different conditions...;
    
    推荐文章