WITH的PostgreSQL文档显示以下示例:
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
它还指出:
WITH查询的一个有用属性是,即使父查询或同级WITH查询多次引用它们,每次执行父查询也只会对它们进行一次评估。
我看到它WITH
可以用于其他方面,例如递归评估。但是在上面的示例中,使用WITH
和创建临时表之间有什么重要区别吗?
如果使用@VaoTsun
—
内森·朗
TEMPORARY TABLE
用ON COMMIT DROP
在查询中,它也只是一个修改查询并重新运行,右的事?postgresql.org/docs/9.6/static/sql-createtable.html
SELECT
在WITH
刚键入名称并重新运行。当使用临时表时,它将花费DROP
和CREATE
。另一方面,如果您构建查询并且要多次重用静态数据,则使用索引构建临时表绝对有利于CTE。