Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser ROW_NUMBER() dans une clause WHERE ?

Pourquoi ne puis-je pas utiliser ROW_NUMBER() dans une clause WHERE ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 18:37:11752parcourir

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

Erreur rencontrée lors de l'utilisation de la fonction ROW_NUMBER() dans la clause WHERE

Une question s'est posée concernant l'utilisation de la fonction ROW_NUMBER() dans la clause WHERE clause. Un utilisateur a rencontré une erreur indiquant : "Les fonctions fenêtrées ne peuvent apparaître que dans les clauses SELECT ou ORDER BY" lors de la tentative de requête suivante :

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

Solution : Wrapper CTE avec fonction fenêtrée

Pour résoudre cette erreur, une technique courante consiste à créer une expression de table commune (CTE) qui encapsule le calcul de la fonction fenêtrée. En encapsulant la requête d'origine dans un CTE, la requête suivante peut accéder aux résultats de la fonction fenêtrée et les utiliser dans la clause WHERE.

Une requête révisée implémentant cette solution apparaîtrait comme suit :

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

En employant cette méthode, la sortie de la fonction fenêtrée devient disponible pour être utilisée dans la clause WHERE, permettant à l'utilisateur de filtrer avec succès les résultats en fonction des critères souhaités.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn