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クエリによって複数回参照されている場合でも、親クエリの実行ごとに1回だけ評価されることです。
WITH
再帰的な評価など、他にも使用できると思います。しかし、上記の例では、WITH
一時テーブルの使用と作成の間に重要な違いはありますか?
@VaoTsun クエリ内で使用
—
Nathan Long
TEMPORARY TABLE
する場合ON COMMIT DROP
は、クエリを変更して再実行するだけでも問題ありませんか?postgresql.org/docs/9.6/static/sql-createtable.html
SELECT
にWITH
は、名前を入力して再実行するだけです。一時テーブルとの間にそれがかかるだろうDROP
とCREATE
。一方、クエリを作成し、静的データを何度も再利用する場合は、インデックスを使用して一時テーブルを作成すると、CTEに対して確実にメリットがあります。