Maison >base de données >tutoriel mysql >Comment résoudre l'erreur « View's SELECT contient une sous-requête dans la clause FROM » de MySQL ?
Dépannage de l'erreur « Le SELECT de la vue contient une sous-requête dans la clause FROM »
Lors de la création d'une vue à l'aide d'une requête contenant des sous-requêtes dans la clause FROM , MySQL peut rencontrer un message d'erreur indiquant "View's SELECT contient une sous-requête dans la clause FROM." Cette erreur indique que MySQL n'autorise pas les sous-requêtes dans la clause FROM des définitions de vue.
Détails de l'erreur
Considérez l'exemple suivant :
create view view_credit_status as ( select credit_orders.client_id, sum(credit_orders.number_of_credits) as purchased, ifnull(t1.credits_used,0) as used from credit_orders left outer join ( select * from ( select credit_usage.client_id, sum(credits_used) as credits_used from credit_usage group by credit_usage.client_id ) as t0 ) as t1 on t1.client_id = credit_orders.client_id where credit_orders.payment_status='Paid' group by credit_orders.client_id );
Cette requête tente de créer une vue nommée view_credit_status qui inclut des sous-requêtes dans la clause FROM. Cependant, MySQL générera l'erreur « Le SELECT de la vue contient une sous-requête dans la clause FROM ».
Solution
Pour résoudre ce problème, la solution de contournement consiste à créer des vues distinctes. pour les sous-requêtes et référencez ces vues à partir de la vue principale. Voici comment procéder :
create view temp_view_used_credits as select credit_usage.client_id, sum(credits_used) as credits_used from credit_usage group by credit_usage.client_id;
create view view_credit_status as ( select credit_orders.client_id, sum(credit_orders.number_of_credits) as purchased, ifnull(temp_view_used_credits.credits_used,0) as used from credit_orders left outer join temp_view_used_credits on temp_view_used_credits.client_id = credit_orders.client_id where credit_orders.payment_status='Paid' group by credit_orders.client_id );
Cette approche sépare la sous-requête en une vue distincte, permettant à MySQL de la référencer dans la vue principale sans violer la restriction.
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!