มีวิธีที่จะทำให้Oracle
แบบสอบถามทำงานเหมือนมีMySQL limit
ประโยคหรือไม่?
ในMySQL
ฉันสามารถทำสิ่งนี้:
select *
from sometable
order by name
limit 20,10
เพื่อรับแถวที่ 21 ถึงแถวที่ 30 (ข้ามแถวแรก 20 ให้อีก 10 แถวถัดไป) แถวจะถูกเลือกหลังแถวorder by
ดังนั้นจึงเริ่มต้นด้วยชื่อที่ 20 ตามตัวอักษร
ในOracle
สิ่งเดียวที่คนพูดถึงคือrownum
คอลัมน์หลอก แต่มันถูกประเมินมาก่อน order by
ซึ่งหมายความว่า:
select *
from sometable
where rownum <= 10
order by name
จะส่งกลับชุดสุ่มสิบแถวเรียงตามชื่อซึ่งมักจะไม่ใช่สิ่งที่ฉันต้องการ นอกจากนี้ยังไม่อนุญาตให้ระบุการชดเชย
ORDER BY
คุณไม่สามารถรับชุดผลลัพธ์ที่แตกต่างกันยกเว้นในกรณีที่มีการเปลี่ยนแปลงข้อมูลพื้นฐานเพราะ นั่นคือจุดรวมของการสั่งซื้อครั้งแรก หากข้อมูลพื้นฐานเปลี่ยนแปลงและชุดผลลัพธ์ของคุณเปลี่ยนไปเพราะเหตุใดจึงไม่แสดงผลลัพธ์ที่อัปเดตให้ผู้ใช้แทนข้อมูลที่ล้าสมัย นอกจากนี้การจัดการของรัฐก็เป็นสิ่งที่ต้องหลีกเลี่ยงให้มากที่สุด มันเป็นแหล่งที่มาของความซับซ้อนและข้อบกพร่อง; นั่นเป็นเหตุผลที่ฟังก์ชั่นได้รับความนิยมมาก และเมื่อไหร่ที่คุณจะรู้ว่าหมดอายุผลลัพธ์ทั้งหมดที่ตั้งไว้ในหน่วยความจำ? ในเว็บคุณไม่มีทางรู้ว่าเมื่อใดที่ผู้ใช้ออกไป