Hadkan bilangan baris hasil selepas mengisih dalam pangkalan data Oracle
Ramai pengguna pangkalan data bergantung pada klausa LIMIT MySQL untuk mendapatkan julat baris tertentu selepas mengisih. Walau bagaimanapun, Oracle sendiri tidak menyokong fungsi yang serupa. Oracle menggunakan lajur pseudo ROWNUM, yang dikira sebelum ORDER BY. Tingkah laku ini boleh menyebabkan hasil yang tidak dijangka apabila cuba mengehadkan bilangan baris berdasarkan pengisihan.
Untuk mencapai fungsi sekatan seperti MySQL dalam Oracle, satu penyelesaian ialah menggunakan subquery. Pertimbangkan contoh berikut:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Pertanyaan ini akan mendapatkan semula 5 baris pertama dalam tertib menurun mengikut lajur sal.
Untuk lebih fleksibiliti, anda boleh menggunakan kaedah berikut:
<code class="language-sql">SELECT * FROM ( SELECT *, ROWNUM AS rnum FROM ( SELECT * FROM emp ORDER BY sal DESC ) AS a ) WHERE rnum >= :MIN_ROW_TO_FETCH AND rnum <= :MAX_ROW_TO_FETCH;</code>
Subkueri ini membolehkan anda menentukan sempadan bawah dan atas untuk mendapatkan semula baris.
Selain itu, Oracle 12c (12.1) memperkenalkan sintaks baharu:
<code class="language-sql">-- 获取前10个结果 SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- 获取第20-30个结果行 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
Sintaks ini menyediakan cara yang lebih bersih untuk mengehadkan bilangan baris hasil berdasarkan pengisihan.
Atas ialah kandungan terperinci Bagaimana untuk mengehadkan keputusan baris dalam pertanyaan Oracle selepas membuat pesanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!