Ich habe zwei Tabellen und muss eine Ansicht erstellen. Die Tabellen sind:
credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, credits_used, date)
Ich benutze die folgende Abfrage, um dies zu tun. Die Abfrage ohne den Teil "Ansicht erstellen" funktioniert gut, aber mit "Ansicht erstellen" wird der Fehler "SELECT der Ansicht enthält eine Unterabfrage in der FROM-Klausel" angezeigt. Was könnte das Problem und die mögliche Lösung sein:
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
von der Version10.2.1
See - jira.mariadb.org/browse/MDEV-3944Antworten:
Gemäß Dokumentation:
MySQL Docs
Ihre Problemumgehung besteht darin, eine Ansicht für jede Ihrer Unterabfragen zu erstellen.
Greifen Sie dann von Ihrer Ansicht aus auf diese Ansichten zu
view_credit_status
quelle
quelle
In der neueren MySQL-Dokumentation zu Anzeigeeinschränkungen heißt es:
Dies bedeutet, dass die Auswahl von MySQL v5.7.7 oder neuer oder das Aktualisieren der vorhandenen MySQL-Instanz auf eine solche Version diese Einschränkung für Ansichten vollständig aufheben würde.
Wenn Sie jedoch über eine aktuelle MySQL-Produktionsversion verfügen, die älter als Version 5.7.7 ist, sollte die Aufhebung dieser Einschränkung für Ansichten nur eines der Kriterien sein, die bewertet werden, wenn Sie entscheiden, ob ein Upgrade durchgeführt werden soll oder nicht. Die Verwendung der in den anderen Antworten beschriebenen Problemumgehungstechniken kann - zumindest kurzfristig - eine praktikablere Lösung sein.
quelle
Sieht für mich so aus, als ob MySQL 3.6 den folgenden Fehler ausgibt, während MySQL 3.7 keine Fehler mehr ausgibt. Ich habe noch nichts in der Dokumentation zu diesem Fix gefunden.
quelle