Heim >Datenbank >MySQL-Tutorial >Warum verbietet MySQL Unterabfragen in der FROM-Klausel einer Ansicht?

Warum verbietet MySQL Unterabfragen in der FROM-Klausel einer Ansicht?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-25 18:55:16416Durchsuche

Why Does MySQL Prohibit Subqueries in a View's FROM Clause?

„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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn