programing

View의 SELECT는 FROM 절에 하위 쿼리를 포함합니다.

minecode 2022. 10. 2. 14:36
반응형

View의 SELECT는 FROM 절에 하위 쿼리를 포함합니다.

테이블이 두 개 있는데 뷰를 작성해야 합니다.표는 다음과 같습니다.

credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)

이를 위해 다음 쿼리를 사용합니다."create view" 부분이 없는 쿼리는 정상적으로 작동하지만 "create view"를 사용하면 "View의 SELECT에 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)

설명서에 따르면:

MySQL 문서

  • SELECT 문은 FROM 절에 하위 쿼리를 포함할 수 없습니다.

회피책은 각 서브쿼리에 대한 뷰를 작성하는 것입니다.

그런 다음 보기 내에서 해당 보기에 액세스합니다.view_credit_status

create view view_clients_credit_usage as
    select client_id, sum(credits_used) as credits_used 
    from credit_usage 
    group by client_id

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 view_clients_credit_usage as t1 on t1.client_id = credit_orders.client_id
    where credit_orders.payment_status='Paid'
    group by credit_orders.client_id)

보기 제한에 대한 최신 MySQL 설명서에 따르면 다음과 같습니다.

MySQL 5.7.7 이전 버전에서는 뷰의 FROM 절에서 하위 쿼리를 사용할 수 없습니다.

즉, MySQL v5.7.7 이상을 선택하거나 기존 MySQL 인스턴스를 이러한 버전으로 업그레이드하면 보기에 대한 이러한 제한이 완전히 제거됩니다.

그러나 현재 운영 MySQL 버전이 v5.7.7보다 이전인 경우 업그레이드에 대한 결정을 내릴 때 뷰에 대한 이 제한을 제거하는 것은 평가 기준 중 하나여야 합니다.적어도 단기적으로는 다른 답변에서 설명한 회피책을 사용하는 것이 보다 현실적인 해결책이 될 수 있습니다.

MySQL 3.6은 다음 오류를 발생시키는 반면 MySQL 3.7은 더 이상 오류를 발생시키지 않는 것으로 보입니다.이 수정에 관한 서류는 아직 찾을 수 없습니다.

언급URL : https://stackoverflow.com/questions/8428641/views-select-contains-a-subquery-in-the-from-clause

반응형