Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() dalam Klausa WHERE?

Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() dalam Klausa WHERE?

Susan Sarandon
Susan Sarandonasal
2024-12-17 05:36:24149semak imbas

How Can I Use ROW_NUMBER() in a WHERE Clause?

Menggunakan Fungsi ROW_NUMBER() dalam Klausa WHERE: Mengatasi Sekatan Fungsi Windowed

Fungsi bertingkap, seperti ROW_NUMBER(), dayakan data berkuasa transformasi dalam set hasil. Walau bagaimanapun, penggunaannya tertakluk kepada kekangan tertentu, salah satunya adalah pengecualiannya daripada klausa WHERE.

Seperti yang ditunjukkan dalam pertanyaan yang dihadapi oleh pengguna, cuba menggunakan ROW_NUMBER() dalam klausa WHERE menghasilkan mesej ralat: "Fungsi bertingkap hanya boleh muncul dalam klausa SELECT atau ORDER BY."

Untuk menangani perkara ini pengehadan, teknik boleh digunakan yang melibatkan pembalut pertanyaan asal dalam Ungkapan Jadual Biasa (CTE), membenarkan pemasukan fungsi bertingkap dalam pertanyaan CTE.

Begini cara untuk melaksanakan penyelesaian ini:

  1. Buat CTE: Merangkumkan pertanyaan asal dalam CTE, memberikan alias (cth., MyCte) kepadanya.
  2. Sertakan ROW_NUMBER() dalam CTE: Dalam CTE, masukkan fungsi ROW_NUMBER() bersama-sama dengan lajur lain yang dikehendaki.
  3. Pilih daripada CTE: Tanya CTE untuk output yang dimaksudkan, menggunakan ROW_NUMBER() hasil dalam klausa WHERE.

Pertanyaan yang disemak akan kelihatan seperti ini:

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 membungkus pertanyaan asal dalam CTE, fungsi bertingkap ROW_NUMBER () kini boleh digunakan dalam klausa WHERE, membolehkan penapisan hasil berdasarkannya nilai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn