Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser ROW_NUMBER() dans une clause WHERE ?
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!