Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Melarang Subkueri dalam Klausa FROM View?

Mengapa MySQL Melarang Subkueri dalam Klausa FROM View?

Patricia Arquette
Patricia Arquetteasal
2024-12-25 18:55:16411semak imbas

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

"View's SELECT Mengandungi Subquery dalam Klausa FROM": Memahami Kekangan Paparan MySQL

Pandangan MySQL menyediakan cara yang mudah untuk memudahkan pengambilan data dengan membentangkan subset tersuai data daripada jadual asas. Walau bagaimanapun, terdapat sekatan tertentu untuk memastikan integriti dan prestasi pandangan ini.

Salah satu sekatan tersebut ialah larangan subkueri dalam klausa FROM pandangan. Dalam contoh yang disediakan, pertanyaan:

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)

melemparkan ralat "View's SELECT mengandungi subquery dalam klausa FROM" kerana ia mengandungi subquery berikut:

(select * from (select credit_usage.client_id, 
                                        sum(credits_used) as credits_used 
                                 from credit_usage 
                                 group by credit_usage.client_id) as t0
)

Untuk menyelesaikan masalah ini isu, seseorang boleh membuat pandangan berasingan untuk subkueri. Sebagai contoh, seseorang boleh mencipta paparan berikut:

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)

Setelah paparan ini dibuat, paparan asal boleh dibuat menggunakan pertanyaan yang diubah suai berikut:

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)

Atas ialah kandungan terperinci Mengapa MySQL Melarang Subkueri dalam Klausa FROM View?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn