Tenho duas tabelas e preciso criar um modo de exibição. As tabelas são:
credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)
Eu uso a seguinte consulta para fazer isso. A consulta sem a parte "criar visão" funciona bem, mas com "criar visão", ela mostra o erro "SELECT da visão contém uma subconsulta na cláusula FROM". Qual poderia ser o problema e a possível solução:
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)
10.2
partir da versão10.2.1
See - jira.mariadb.org/browse/MDEV-3944Respostas:
Conforme documentação:
Documentos MySQL
Sua solução alternativa seria criar uma visualização para cada uma de suas subconsultas.
Em seguida, acesse essas visualizações de dentro de sua visualização
view_credit_status
fonte
fonte
Como a documentação mais recente do MySQL sobre restrições de visualização diz:
Isso significa que escolher um MySQL v5.7.7 ou mais recente ou atualizar a instância existente do MySQL para essa versão removeria completamente essa restrição nas visualizações.
No entanto, se você tiver uma versão de produção atual do MySQL anterior à v5.7.7, a remoção dessa restrição nas visualizações deve ser apenas um dos critérios avaliados durante a decisão de atualizar ou não. Usar as técnicas alternativas descritas nas outras respostas pode ser uma solução mais viável - pelo menos a curto prazo.
fonte
Parece que o MySQL 3.6 apresenta o seguinte erro, enquanto o MySQL 3.7 não apresenta mais erros. Ainda não encontrei nada na documentação sobre essa correção.
fonte