Memahami Had Fungsi Tetingkap dalam Klausa WHERE
SQL Server melarang penggunaan fungsi tetingkap dalam klausa WHERE. Sekatan ini berpunca daripada susunan asas pemprosesan pertanyaan dan potensi kekaburan dalam tafsiran hasil.
Piawaian SQL menentukan bahawa fungsi tetingkap beroperasi selepas klausa WHERE, JOIN, GROUP BY dan HAVING telah diproses. Oleh itu, memasukkannya dalam klausa WHERE secara logiknya mustahil.
Isu teras ialah ketidakpastian yang timbul daripada susunan penilaian predikat yang berbeza-beza. Pertimbangkan senario di mana anda ingin memilih baris yang nilai lajur melebihi ambang tertentu, tetapi hanya dalam subset yang ditakrifkan oleh fungsi tetingkap (mis., baris N teratas). Hasilnya bergantung sepenuhnya pada sama ada keadaan penapisan digunakan sebelum atau selepas pengiraan fungsi tetingkap.
Contohnya:
<code class="language-sql">SELECT col1 FROM T1 WHERE ROW_NUMBER() OVER (ORDER BY col1) > 3 AND col1 > 'B'</code>
Keputusan akan berbeza bergantung pada susunan penilaian. Untuk mengelakkan kekaburan ini dan menjamin hasil pertanyaan yang konsisten dan boleh diramal, SQL Server menghalang fungsi tetingkap daripada digunakan dalam klausa WHERE. Ini memastikan pemprosesan pertanyaan yang boleh dipercayai dan mengelakkan hasil yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Fungsi Tetingkap dalam Klausa SQL WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!