Heim  >  Artikel  >  Datenbank  >  Wie kann der Fehler „Table Specified Twice“ in MySQL bei der Verwendung von Unterabfragen behoben werden?

Wie kann der Fehler „Table Specified Twice“ in MySQL bei der Verwendung von Unterabfragen behoben werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 15:02:02441Durchsuche

How to Resolve the

MySQL-Fehler: Tabelle zweimal angegeben

Beim Versuch, eine Tabelle zu aktualisieren und sie gleichzeitig als Datenquelle zu verwenden, kann MySQL einen Fehler ausgeben Zeigt an, dass die Tabelle zweimal angegeben ist. Dies tritt normalerweise auf, wenn Unterabfragen mit Tabellen-Aliasing verwendet werden.

Betrachten Sie beispielsweise die folgende Abfrage:

UPDATE manager AS m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
  SELECT m2.branch_id
  FROM manager AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT DISTINCT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);

Diese Abfrage versucht, die Managertabelle basierend auf einer Unterabfrage zu aktualisieren, die prüft, ob bestimmte Felder vorhanden sind in Manager-Match-Werten aus der Tabelle branch_master, wobei der Typ „Finanzen“ ist. Allerdings beanstandet MySQL, dass die Manager-Tabelle sowohl als Ziel (in der UPDATE-Klausel) als auch als Datenquelle (in der Unterabfrage) verwendet wird.

Um dieses Problem zu beheben und zu verhindern, dass die „Tabelle ist Wenn der Fehler „zweimal angegeben“ auftritt, können wir eine abgeleitete Tabelle für die Unterabfrage verwenden. Dazu gehört das Erstellen einer temporären Tabelle basierend auf der Originaltabelle und die anschließende Auswahl aus dieser abgeleiteten Tabelle:

FROM (SELECT * FROM manager) AS m2

Indem wir die ursprüngliche Managertabelle in Klammern setzen und das Ergebnis mit dem Alias ​​m2 versehen, erstellen wir eine neue abgeleitete Tabelle. Dadurch können wir Daten aus der Managertabelle auswählen, ohne den Managernamen zweimal explizit anzugeben.

Aktualisierte Abfrage:

UPDATE manager
SET status = 'Y'
WHERE branch_id IN (
  SELECT branch_id
  FROM (SELECT * FROM manager) AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);

Diese aktualisierte Abfrage verwendet korrekt eine abgeleitete Tabelle für die Unterabfrage und löst das auf Der Fehler „Tabelle wurde zweimal angegeben“ führt dazu, dass die Abfrage erfolgreich ausgeführt werden kann.

Das obige ist der detaillierte Inhalt vonWie kann der Fehler „Table Specified Twice“ in MySQL bei der Verwendung von Unterabfragen behoben werden?. 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