Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat 'View's SELECT mengandungi subquery dalam klausa FROM' MySQL?

Bagaimana untuk Menyelesaikan Ralat 'View's SELECT mengandungi subquery dalam klausa FROM' MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 12:51:09713semak imbas

How to Resolve MySQL's

Menyelesaikan masalah "View's SELECT Contains a Subquery in the FROM Clause" Ralat

Apabila mencipta paparan menggunakan pertanyaan yang mengandungi subquery dalam FROM klausa, MySQL mungkin menghadapi mesej ralat yang menyatakan "View's SELECT mengandungi subquery dalam klausa FROM." Ralat ini menunjukkan bahawa MySQL tidak membenarkan subkueri dalam definisi klausa paparan FROM.

Butiran Ralat

Pertimbangkan contoh berikut:

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
);

Pertanyaan ini cuba mencipta paparan bernama view_credit_status yang merangkumi subkueri dalam klausa FROM. Walau bagaimanapun, MySQL akan menimbulkan ralat "View's SELECT mengandungi subquery dalam klausa FROM".

Penyelesaian

Untuk menyelesaikan isu ini, penyelesaiannya adalah dengan mencipta pandangan berasingan untuk subkueri dan rujuk pandangan tersebut daripada pandangan utama. Begini caranya:

  1. Buat paparan bernama temp_view_used_credits untuk subkueri yang berkaitan dengan penggunaan kredit:
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;
  1. Buat paparan utama_status_kredit menggunakan temp_view_used_credits paparan:
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
);

Pendekatan ini memisahkan subkueri kepada paparan berasingan, membenarkan MySQL merujuknya dalam paparan utama tanpa melanggar sekatan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'View's SELECT mengandungi subquery dalam klausa FROM' MySQL?. 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