Подтвердить что ты не робот

Просмотр 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)
4b9b3361

Ответ 1

Согласно документации:

Документы MySQL

  • Оператор SELECT не может содержать подзапрос в предложении FROM.

Обходным решением будет создание представления для каждого из ваших подзапросов.

Затем получите доступ к этим представлениям из вашего представления view_credit_status

Ответ 2

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)

Ответ 3

Поскольку в более поздней документации MySQL на ограничения просмотров говорится:

До MySQL 5.7.7 подзапросы не могут использоваться в предложении FROM представления.

Это означает, что выбор MySQL v5.7.7 или новее или обновление существующего экземпляра MySQL до такой версии полностью устранит это ограничение на представления.

Однако, если у вас есть текущая версия MySQL для производства, которая раньше, чем v5.7.7, то удаление этого ограничения на представлениях должно быть только одним из критериев, оцениваемых при принятии решения об обновлении или нет. Использование обходных методов, описанных в других ответах, может быть более жизнеспособным решением - по крайней мере, в более короткие сроки.

Ответ 4

Мне кажется, что MySQL 3.6 дает следующую ошибку, в то время как MySQL 3.7 больше не содержит ошибок. Я еще ничего не нашел в документации относительно этого исправления.