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

Mengapa Saya Tidak Boleh Menggunakan ROW_NUMBER() dalam Klausa WHERE?

Linda Hamilton
Linda Hamiltonasal
2024-12-16 18:37:11752semak imbas

Why Can't I Use ROW_NUMBER() in a WHERE Clause?

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!

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