>데이터 베이스 >MySQL 튜토리얼 >MySQL이 뷰의 FROM 절에서 하위 쿼리를 금지하는 이유는 무엇입니까?

MySQL이 뷰의 FROM 절에서 하위 쿼리를 금지하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-25 18:55:16409검색

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

"뷰의 SELECT에 FROM 절에 하위 쿼리가 포함되어 있음": MySQL 뷰 제약 조건 이해

MySQL 뷰는 데이터 검색을 단순화하는 편리한 방법을 제공합니다. 기본 테이블에서 사용자 정의된 데이터 하위 집합을 제공합니다. 그러나 이러한 뷰의 무결성과 성능을 보장하기 위한 특정 제한 사항이 있습니다.

이러한 제한 사항 중 하나는 뷰의 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)

다음 하위 쿼리가 포함되어 있기 때문에 "View's 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.