Mam dwie tabele i potrzebuję stworzyć widok. Tabele to:
credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)
Aby to zrobić, używam następującego zapytania. Zapytanie bez części „tworzenie widoku” działa dobrze, ale w przypadku „tworzenia widoku” wyświetla błąd „SELECT widoku zawiera podzapytanie w klauzuli FROM”. Jaki może być problem i możliwe rozwiązanie:
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
od wersji10.2.1
Zobacz - jira.mariadb.org/browse/MDEV-3944Odpowiedzi:
Zgodnie z dokumentacją:
Dokumenty MySQL
Rozwiązaniem byłoby utworzenie widoku dla każdego podzapytania.
Następnie uzyskaj dostęp do tych widoków z poziomu swojego widoku
view_credit_status
źródło
źródło
Jak mówi najnowsza dokumentacja MySQL dotycząca ograniczeń widoku :
Oznacza to, że wybranie MySQL w wersji 5.7.7 lub nowszej lub aktualizacja istniejącej instancji MySQL do takiej wersji całkowicie usunie to ograniczenie widoków.
Jeśli jednak masz bieżącą produkcyjną wersję MySQL starszą niż 5.7.7, usunięcie tego ograniczenia widoków powinno być tylko jednym z kryteriów ocenianych przy podejmowaniu decyzji o aktualizacji lub nie. Korzystanie z technik obejścia opisanych w innych odpowiedziach może być bardziej realnym rozwiązaniem - przynajmniej w krótszej perspektywie.
źródło
Wydaje mi się, że MySQL 3.6 wyświetla następujący błąd, podczas gdy MySQL 3.7 nie wyświetla już błędów. Nie znalazłem jeszcze niczego w dokumentacji dotyczącej tej poprawki.
źródło