Ralat Ditemui semasa Menggunakan Fungsi ROW_NUMBER() dalam Klausa WHERE
Timbul persoalan mengenai penggunaan fungsi ROW_NUMBER() dalam WHERE klausa. Seorang pengguna mengalami ralat yang menyatakan, "Fungsi bertingkap hanya boleh muncul dalam klausa SELECT atau ORDER BY" semasa mencuba pertanyaan berikut:
SELECT employee_id FROM v_employee WHERE ROW_NUMBER() OVER (ORDER BY employee_id) > 0 ORDER BY employee_id
Penyelesaian: Wrapper CTE dengan Fungsi Windowed
Untuk menyelesaikan ralat ini, teknik biasa melibatkan mencipta Common Table Expression (CTE) yang merangkum pengiraan fungsi bertingkap. Dengan membungkus pertanyaan asal dalam CTE, pertanyaan seterusnya boleh mengakses hasil fungsi bertingkap dan menggunakannya dalam klausa WHERE.
Pertanyaan disemak yang melaksanakan penyelesaian ini akan muncul seperti berikut:
WITH MyCte AS ( select employee_id, RowNum = ROW_NUMBER() OVER (ORDER BY employee_id) from v_employee ORDER BY employee_id ) SELECT employee_id FROM MyCte WHERE RowNum > 0
Dengan menggunakan kaedah ini, output fungsi bertingkap tersedia untuk digunakan dalam klausa WHERE, membenarkan pengguna untuk berjaya menapis keputusan berdasarkan kriteria yang dikehendaki.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan ROW_NUMBER() dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!