ホームページ > データベース > mysql チュートリアル > MySQL がビューの FROM 句でサブクエリを禁止するのはなぜですか?

MySQL がビューの FROM 句でサブクエリを禁止するのはなぜですか?

Patricia Arquette
リリース: 2024-12-25 18:55:16
オリジナル
408 人が閲覧しました

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

「ビューの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート