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 WITHdapat digunakan untuk hal-hal lain, seperti evaluasi rekursif. Tetapi dalam contoh di atas, apakah ada perbedaan penting antara menggunakan WITHdan membuat tabel sementara?
TEMPORARY TABLEdengan ON COMMIT DROPdalam kueri, itu juga hanya masalah memodifikasi kueri dan menjalankan kembali, kan? postgresql.org/docs/9.6/static/sql-createtable.html
SELECTdalamWITHhanyalah mengetikkan nama dan menjalankan kembali. Sementara dengan meja sementara dibutuhkanDROPdanCREATE. 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.