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)
설명서에 따르면:
- 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
'programing' 카테고리의 다른 글
C#과 Java의 3진 연산자(? :)의 차이 (0) | 2022.10.02 |
---|---|
pyplot 하위 그림에 대한 공통 축 레이블 (0) | 2022.10.02 |
kernel.h의 min 매크로에서 "(min) (&_min1 == &_min2)의 함수는 무엇입니까? (0) | 2022.10.01 |
양식을 제출할 때 모든 POST 결과를 인쇄하려면 어떻게 해야 합니까? (0) | 2022.10.01 |
python module docstring에 넣을 내용 (0) | 2022.10.01 |