คำถามติดแท็ก derived-tables

4
เป็นไปได้หรือไม่ว่าคำสั่งนั้นจะไม่รับประกันสำหรับตารางที่ซ้ำซ้อนนี้
ฉัน stumbled เมื่อคำถามนี้ในการสนทนา Twitter กับ Lukas เอ๊ด แม้ว่าพฤติกรรมที่ถูกต้องจะใช้คำสั่งย่อย ORDER BY กับการสืบค้นนอกสุดเนื่องจากที่นี่เราไม่ได้ใช้ DISTINCT, GROUP BY, JOIN หรือส่วนคำสั่ง WHERE ใด ๆ ในการค้นหานอกสุดทำไม RDBMS ถึงไม่ผ่าน ข้อมูลที่เข้ามาในขณะที่มันถูกจัดเรียงตามแบบสอบถามภายใน? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t เมื่อเรียกใช้ตัวอย่างนี้บน PostgreSQL อย่างน้อยคุณจะได้รับแผนการดำเนินการเดียวกันสำหรับทั้งแบบสอบถามภายในและตัวอย่างตารางที่ได้รับนี้รวมถึงชุดผลลัพธ์เดียวกัน ดังนั้นฉันจะสมมติว่าผู้วางแผนจะยกเลิกการสืบค้นนอกสุดเพียงเพราะซ้ำซ้อนหรือเพียงแค่ส่งผ่านผลลัพธ์จากตารางด้านใน ไม่มีใครคิดว่านี่อาจเป็นกรณีหรือไม่

5
ความแตกต่างระหว่างมุมมองอินไลน์และด้วยคำสั่งย่อย?
มุมมองอินไลน์ช่วยให้คุณสามารถเลือกจากแบบสอบถามย่อยราวกับว่ามันเป็นตารางที่แตกต่างกัน: SELECT * FROM /* Selecting from a query instead of table */ ( SELECT c1 FROM t1 WHERE c1 > 0 ) a WHERE a.c1 < 50; ฉันเคยเห็นสิ่งนี้อ้างถึงโดยใช้คำต่าง ๆ : มุมมองอินไลน์, พร้อมด้วยข้อ, CTE และตารางที่ได้รับ สำหรับฉันดูเหมือนว่าพวกเขาเป็นไวยากรณ์เฉพาะของผู้ขายที่แตกต่างกันสำหรับสิ่งเดียวกัน นี่เป็นข้อสันนิษฐานที่ผิดหรือเปล่า? มีความแตกต่างทางเทคนิค / ประสิทธิภาพระหว่างสิ่งเหล่านี้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.