The PostgreSQL dokumentasi di DENGAN menunjukkan contoh berikut:
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;
Itu juga mencatat:
Properti yang berguna dari kueri WITH adalah bahwa mereka dievaluasi hanya sekali per eksekusi kueri induk, bahkan jika itu dirujuk lebih dari sekali oleh kueri induk atau saudara kueri DENGAN queri.
Saya melihat itu WITH
dapat digunakan untuk hal-hal lain, seperti evaluasi rekursif. Tetapi dalam contoh di atas, apakah ada perbedaan penting antara menggunakan WITH
dan membuat tabel sementara?
TEMPORARY TABLE
dengan ON COMMIT DROP
dalam kueri, itu juga hanya masalah memodifikasi kueri dan menjalankan kembali, kan? postgresql.org/docs/9.6/static/sql-createtable.html
SELECT
dalamWITH
hanyalah mengetikkan nama dan menjalankan kembali. Sementara dengan meja sementara dibutuhkanDROP
danCREATE
. Di sisi lain jika Anda membangun kueri dan Anda akan menggunakan kembali data statis banyak kali - membangun tabel sementara dengan indeks jelas bermanfaat melawan CTE.