Các tài liệu PostgreSQL trên VỚI chương trình ví dụ sau:
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;
Nó cũng ghi chú:
Một thuộc tính hữu ích của các truy vấn VỚI là chúng chỉ được đánh giá một lần cho mỗi lần thực hiện truy vấn cha, ngay cả khi chúng được truy vấn nhiều lần bởi truy vấn cha hoặc anh chị em với các truy vấn.
Tôi thấy rằng WITH
có thể được sử dụng cho những thứ khác, như đánh giá đệ quy. Nhưng trong ví dụ trên, có sự khác biệt quan trọng nào giữa việc sử dụng WITH
và tạo các bảng tạm thời không?
TEMPORARY TABLE
với ON COMMIT DROP
vòng một truy vấn, nó cũng chỉ là vấn đề sửa đổi các truy vấn và tái chạy, phải không? postgresql.org/docs/9.6/static/sql-createtable.html
SELECT
vàoWITH
chỉ là gõ tên và chạy lại. Trong khi với bảng tạm thời, nó sẽ mấtDROP
vàCREATE
. Mặt khác, nếu bạn xây dựng một truy vấn và bạn sẽ sử dụng lại dữ liệu tĩnh rất nhiều lần - xây dựng bảng tạm thời với các chỉ mục chắc chắn có lợi cho CTE.