subconsultas subconsulta ejemplos datos concatenar mysql sql database views

mysql - ejemplos - El SELECCIONAR de View contiene una subconsulta en la cláusula FROM



subconsultas oracle hr (4)

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)

Uso la siguiente consulta para hacer esto. La consulta sin la parte "crear vista" funciona bien, pero con "crear vista", muestra el error "SELECT de la vista 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)


Como dice la documentación más reciente de MySQL sobre restricciones de vista :

Antes de MySQL 5.7.7, las subconsultas no se pueden usar en la cláusula FROM de una vista.

Esto significa que elegir MySQL v5.7.7 o posterior o actualizar la instancia existente de MySQL a dicha versión eliminaría por completo esta restricción en las vistas.

Sin embargo, si tiene una versión actual de MySQL de producción que es anterior a v5.7.7, entonces la eliminación de esta restricción en las vistas solo debe ser uno de los criterios que se evalúan mientras se toma la decisión de actualizar o no. Usar 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.


Me parece que MySQL 3.6 da el siguiente error mientras que MySQL 3.7 ya no se equivoca. Todavía tengo que encontrar algo en la documentación con respecto a esta solución.


Según la documentación:

Documentos de MySQL

  • La instrucción SELECT no puede contener una subconsulta en la cláusula FROM.

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


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)