「ビューの SELECT に FROM 句のサブクエリが含まれている」: MySQL ビューの制約について理解する
MySQL ビューは、データの取得を簡素化する便利な方法を提供します基礎となるテーブルからカスタマイズされたデータのサブセットを提示することによって。ただし、これらのビューの整合性とパフォーマンスを確保するために、特定の制限があります。
そのような制限の 1 つは、ビューの FROM 句でのサブクエリの禁止です。提供された例では、クエリ:
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)
は、次のサブクエリが含まれているため、「ビューの SELECT には FROM 句にサブクエリが含まれています」というエラーがスローされます:
(select * from (select credit_usage.client_id, sum(credits_used) as credits_used from credit_usage group by credit_usage.client_id) as t0 )
これを解決するには問題がある場合は、サブクエリに対して個別のビューを作成できます。たとえば、次のビューを作成できます:
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)
これらのビューが作成されたら、次の変更されたクエリを使用して元のビューを作成できます:
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)
以上がMySQL がビューの FROM 句でサブクエリを禁止するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。