เอกสาร 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;
นอกจากนี้ยังบันทึก:
คุณสมบัติที่มีประโยชน์ของการสืบค้นด้วยแบบสอบถามนั้นจะถูกประเมินเพียงครั้งเดียวต่อการประมวลผลของการสืบค้นหลักแม้ว่าจะถูกอ้างถึงมากกว่าหนึ่งครั้งโดยการสืบค้นหลักหรือการสืบค้นด้วยคำสั่ง Sibling WITH
ฉันเห็นว่าWITH
สามารถใช้สำหรับสิ่งอื่น ๆ เช่นการประเมินแบบเรียกซ้ำ แต่ในตัวอย่างข้างต้นมีความแตกต่างที่สำคัญระหว่างการใช้WITH
และการสร้างตารางชั่วคราวหรือไม่?
TEMPORARY TABLE
กับON COMMIT DROP
ภายในแบบสอบถามก็เป็นเพียงเรื่องของการแก้ไขแบบสอบถามและเรียกใช้อีกครั้งใช่มั้ย postgresql.org/docs/9.6/static/sql-createtable.html
SELECT
ในWITH
เป็นเพียงพิมพ์ชื่อและเรียกใช้ซ้ำ ขณะที่ตารางชั่วคราวมันจะใช้เวลาและDROP
CREATE
ในทางกลับกันถ้าคุณสร้างแบบสอบถามและคุณจะนำข้อมูลสแตติกมาใช้ซ้ำหลายครั้งการสร้างตารางชั่วคราวด้วยดัชนีนั้นมีประโยชน์อย่างมากต่อ CTE