Heim >Datenbank >MySQL-Tutorial >Wie behebe ich den MySQL-Fehler „View's SELECT enthält eine Unterabfrage in der FROM-Klausel'?

Wie behebe ich den MySQL-Fehler „View's SELECT enthält eine Unterabfrage in der FROM-Klausel'?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-27 12:51:09680Durchsuche

How to Resolve MySQL's

Fehlerbehebung „SELECT der Ansicht enthält eine Unterabfrage in der FROM-Klausel“

Beim Erstellen einer Ansicht mithilfe einer Abfrage, die Unterabfragen in der FROM-Klausel enthält In MySQL wird möglicherweise eine Fehlermeldung angezeigt, die besagt: „Views SELECT enthält eine Unterabfrage in der FROM-Klausel.“ Dieser Fehler weist darauf hin, dass MySQL keine Unterabfragen in der FROM-Klausel von Ansichtsdefinitionen zulässt.

Fehlerdetails

Betrachten Sie das folgende Beispiel:

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
);

Diese Abfrage versucht, eine Ansicht mit dem Namen view_credit_status zu erstellen, die Unterabfragen in der FROM-Klausel enthält. MySQL löst jedoch den Fehler „SELECT der Ansicht enthält eine Unterabfrage in der FROM-Klausel“ aus.

Lösung

Um dieses Problem zu beheben, besteht die Problemumgehung darin, separate Ansichten zu erstellen für die Unterabfragen und verweisen Sie auf diese Ansichten aus der Primäransicht. So geht das:

  1. Erstellen Sie eine Ansicht mit dem Namen temp_view_used_credits für die Unterabfrage, die sich auf die Kreditverwendung bezieht:
create view temp_view_used_credits as
select credit_usage.client_id, sum(credits_used) as credits_used
from credit_usage
group by credit_usage.client_id;
  1. Erstellen Sie die Hauptansicht view_credit_status unter Verwendung der temp_view_used_credits Ansicht:
create view view_credit_status as
(
  select credit_orders.client_id,
    sum(credit_orders.number_of_credits) as purchased,
    ifnull(temp_view_used_credits.credits_used,0) as used
  from credit_orders
  left outer join temp_view_used_credits on temp_view_used_credits.client_id = credit_orders.client_id
  where credit_orders.payment_status='Paid'
  group by credit_orders.client_id
);

Dieser Ansatz trennt die Unterabfrage in eine separate Ansicht, sodass MySQL sie in der Primäransicht referenzieren kann, ohne die Einschränkung zu verletzen.

Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „View's SELECT enthält eine Unterabfrage in der FROM-Klausel'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn