Tengo dos tablas y necesito crear una vista. Las tablas son:
credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)
Utilizo la siguiente consulta para hacer esto. La consulta sin la parte "crear vista" funciona bien, pero con "crear vista", muestra el error "La vista SELECT contiene una subconsulta en la cláusula FROM". ¿Cuál podría ser el problema y la posible solución?
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
desde la versión10.2.1
Ver - jira.mariadb.org/browse/MDEV-3944Respuestas:
Según documentación:
Documentos de MySQL
Su solución alternativa sería crear una vista para cada una de sus subconsultas.
Luego acceda a esas vistas desde su vista
view_credit_status
fuente
fuente
Como dice la documentación de MySQL más reciente sobre restricciones de vista :
Esto significa que elegir un MySQL v5.7.7 o más reciente o actualizar la instancia de MySQL existente a dicha versión eliminaría esta restricción en las vistas por completo.
Sin embargo, si tiene una versión de producción actual de MySQL anterior a la v5.7.7, la eliminación de esta restricción en las vistas solo debe ser uno de los criterios que se evalúan al tomar la decisión de actualizar o no. El uso de las técnicas de solución alternativa descritas en las otras respuestas puede ser una solución más viable, al menos a corto plazo.
fuente
Me parece que MySQL 3.6 da el siguiente error, mientras que MySQL 3.7 ya no produce errores. Todavía tengo que encontrar algo en la documentación con respecto a esta solución.
fuente