У меня есть две таблицы, и мне нужно создать представление. Таблицы:
credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)
Для этого я использую следующий запрос. Запрос без части «создать представление» работает хорошо, но с «создать представление» он показывает ошибку «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)
10.2
начиная с версии10.2.1
See - jira.mariadb.org/browse/MDEV-3944Ответы:
Согласно документации:
Документы MySQL
Обходной путь - создать представление для каждого из ваших подзапросов.
Затем получите доступ к этим представлениям из вашего представления
view_credit_status
источник
источник
Как сказано в более поздней документации MySQL по ограничениям просмотра :
Это означает, что выбор MySQL v5.7.7 или новее или обновление существующего экземпляра MySQL до такой версии полностью снимет это ограничение на представления.
Однако, если у вас есть текущая производственная версия MySQL, более ранняя, чем v5.7.7, то снятие этого ограничения на представления должно быть только одним из критериев, оцениваемых при принятии решения об обновлении или нет. Использование методов обхода, описанных в других ответах, может быть более жизнеспособным решением - по крайней мере, в краткосрочной перспективе.
источник
Мне кажется, MySQL 3.6 выдает следующую ошибку, а MySQL 3.7 больше не выдает ошибок. Я еще ничего не нашел в документации относительно этого исправления.
источник