tại sao tôi không thể sử dụng hàm cửa sổ trong mệnh đề where trong SQL Server?
Một câu trả lời, mặc dù không đặc biệt nhiều thông tin, là vì thông số kỹ thuật nói rằng bạn không thể.
Xem bài viết của Itzik Ben Gan - Xử lý truy vấn logic:Nó là gì và nó có ý nghĩa gì với bạn và cụ thể là hình ảnh ở đây. Các chức năng của cửa sổ được đánh giá tại thời điểm SELECT
trên tập kết quả còn lại sau tất cả WHERE
/ JOIN
/ GROUP BY
/ HAVING
các điều khoản đã được xử lý (bước 5.1).
thực sự tôi đang tìm kiếm lý do đằng sau việc không thể sử dụng các hàm gió trong mệnh đề where.
Lý do mà chúng không được phép trong WHERE
là nó sẽ tạo ra sự mơ hồ. Đánh cắp ví dụ của Itzik Ben Gan từ T-SQL Hiệu suất cao bằng cách sử dụng các chức năng cửa sổ (tr.25)
Giả sử bảng của bạn là
CREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)
INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')
Và truy vấn của bạn
SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'
Kết quả đúng sẽ là gì? Bạn có mong đợi rằng col1 > 'B'
vị ngữ chạy trước hay sau khi đánh số hàng?