İLE PostgreSQL belgeleri gösterir Aşağıdaki örnek:
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;
Ayrıca şunu da not eder:
WITH sorgularının yararlı bir özelliği, ana sorgu veya birden fazla kardeş sorgusu tarafından birden çok kez yönlendirilse bile, ana sorgunun yürütülmesi başına yalnızca bir kez değerlendirilmesidir.
Bunun WITHözyinelemeli değerlendirme gibi başka şeyler için de kullanılabileceğini görüyorum . Ancak yukarıdaki örnekte, WITHgeçici tablo kullanma ve oluşturma arasında önemli bir fark var mı?
TEMPORARY TABLEile birlikte kullanıyorsanız ON COMMIT DROP, bu sadece sorguyu değiştirme ve yeniden çalıştırma meselesidir, değil mi? postgresql.org/docs/9.6/static/sql-createtable.html
SELECTiçindeWITHbunu yazarak ve rerunning edilir. Geçici tablo ileDROPve alırCREATE. Öte yandan, bir sorgu oluşturursanız ve statik verileri defalarca yeniden kullanırsanız, dizinlerle geçici tablo oluşturmak CTE'ye karşı kesinlikle faydalıdır.