Heim >Datenbank >MySQL-Tutorial >Warum verbietet MySQL Unterabfragen in der FROM-Klausel einer Ansicht?
„SELECT der Ansicht enthält eine Unterabfrage in der FROM-Klausel“: MySQL-Ansichtseinschränkungen verstehen
MySQL-Ansichten bieten eine praktische Möglichkeit, den Datenabruf zu vereinfachen durch die Präsentation einer benutzerdefinierten Teilmenge von Daten aus zugrunde liegenden Tabellen. Es gibt jedoch bestimmte Einschränkungen, um die Integrität und Leistung dieser Ansichten sicherzustellen.
Eine dieser Einschränkungen ist das Verbot von Unterabfragen in der FROM-Klausel einer Ansicht. Im bereitgestellten Beispiel löst die Abfrage:
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)
den Fehler „Views SELECT enthält eine Unterabfrage in der FROM-Klausel“ aus, da sie die folgende Unterabfrage enthält:
(select * from (select credit_usage.client_id, sum(credits_used) as credits_used from credit_usage group by credit_usage.client_id) as t0 )
Um dieses Problem zu beheben Problem, man kann separate Ansichten für die Unterabfragen erstellen. Beispielsweise könnte man die folgenden Ansichten erstellen:
create view view_credit_orders as (select credit_orders.client_id, sum(credit_orders.number_of_credits) as purchased from credit_orders where credit_orders.payment_status='Paid' group by credit_orders.client_id) create view view_credit_usage as (select credit_usage.client_id, sum(credit_usage.credits_used) as credits_used from credit_usage group by credit_usage.client_id)
Sobald diese Ansichten erstellt wurden, kann die ursprüngliche Ansicht mithilfe der folgenden modifizierten Abfrage erstellt werden:
create view view_credit_status as (select view_credit_orders.client_id, view_credit_orders.purchased, ifnull(view_credit_usage.credits_used,0) as used from view_credit_orders left outer join view_credit_usage on view_credit_orders.client_id = view_credit_usage.client_id)
Das obige ist der detaillierte Inhalt vonWarum verbietet MySQL Unterabfragen in der FROM-Klausel einer Ansicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!