Menggunakan Oracle ORDER BY dan ROWNUM Dengan Cekap
Dalam Oracle, pseudocolumn ROWNUM menyediakan cara untuk mendapatkan semula baris tertentu daripada set hasil berdasarkan urutan mereka. Walau bagaimanapun, menggunakan ROWNUM dengan ORDER BY boleh membawa kepada hasil yang tidak dijangka.
Untuk mendapatkan semula rekod terbaharu daripada jadual, pertanyaan SQL berikut biasanya digunakan dalam SQL Server:
SELECT TOP 1 * FROM RACEWAY_INPUT_LABO ORDER BY t_stamp DESC
Walau bagaimanapun , dalam Oracle, menggunakan pendekatan ini dengan ROWNUM seperti dalam pertanyaan berikut:
SELECT * FROM raceway_input_labo WHERE rownum <= 1 ORDER BY t_stamp DESC
akan mendapatkan semula rekod tertua dan bukannya yang terbaru. Ini kerana ROWNUM dinilai sebelum ORDER BY dalam Oracle.
Untuk mendapatkan semula rekod terbaharu dengan berkesan menggunakan ROWNUM Oracle, gunakan subqueries seperti berikut:
SELECT * FROM (SELECT * FROM raceway_input_labo ORDER BY t_stamp DESC) WHERE rownum <= 1
Pendekatan subkueri ini memastikan bahawa ORDER BY digunakan dahulu, menghasilkan output yang diingini.
Sebagai alternatif, lebih banyak penyelesaian serba boleh yang berfungsi dalam SQL Server dan Oracle boleh dilaksanakan menggunakan fungsi row_number():
select ril.* from (select ril.*, row_number() over (order by t_stamp desc) as seqnum from raceway_input_labo ril ) ril where seqnum = 1
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Baris Teratas dengan Cekap daripada Jadual Oracle Menggunakan `ORDER BY` dan `ROWNUM`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!