首頁 >資料庫 >mysql教程 >為什麼不能在 WHERE 子句中使用 ROW_NUMBER()?

為什麼不能在 WHERE 子句中使用 ROW_NUMBER()?

Linda Hamilton
Linda Hamilton原創
2024-12-16 18:37:11747瀏覽

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

在WHERE 子句中使用ROW_NUMBER() 函數時遇到錯誤

出現了有關ROWHERE 中ROW_NUMBER() 函數使用的問題條款。一位使用者在嘗試以下查詢時遇到錯誤,指出「視窗函數只能出現在SELECT 或ORDER BY 子句中」:

SELECT employee_id
FROM v_employee
WHERE ROW_NUMBER() OVER (ORDER BY employee_id) > 0
ORDER BY employee_id

解決方案:使用視窗函數的包裝器CTE

要解決此錯誤,一種常見的技術涉及創建封裝視窗函數計算的公共表表達式(CTE)。透過將原始查詢包裝在 CTE 中,後續查詢可以存取視窗函數的結果並在 WHERE 子句中使用它們。

實現此解決方案的修改後的查詢將如下所示:

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

透過使用此方法,視窗函數的輸出可在WHERE 子句中使用,從而允許用戶根據所需的條件成功過濾結果。

以上是為什麼不能在 WHERE 子句中使用 ROW_NUMBER()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn