it-swarm.com.de

Was ist der Fehler "Jede abgeleitete Tabelle muss einen eigenen Alias ​​haben" in MySQL?

Ich führe diese Abfrage unter MySQL aus

SELECT ID FROM (
    SELECT ID, msisdn
    FROM (
        SELECT * FROM TT2
    )
);

und es gibt diesen Fehler:

Jede abgeleitete Tabelle muss einen eigenen Alias ​​haben.

Was verursacht diesen Fehler?

346
silverkid

Jede abgeleitete Tabelle (AKA-Unterabfrage) muss tatsächlich einen Alias ​​haben. Das heißt Jede Abfrage in Klammern muss einen Alias ​​(AS whatever) haben, auf den im Rest der äußeren Abfrage verwiesen werden kann.

SELECT ID FROM (
    SELECT ID, msisdn FROM (
        SELECT * FROM TT2
    ) AS T
) AS T

In Ihrem Fall könnte natürlich die gesamte Abfrage ersetzt werden durch:

SELECT ID FROM TT2
487
Paul

Ich denke, es fordert Sie dazu auf:

SELECT ID
FROM (SELECT ID,
             msisdn 
      FROM (SELECT * FROM TT2) as myalias
     ) as anotheralias;

Aber warum schreiben Sie diese Abfrage überhaupt?

74
hometoast

Hier ist ein anderes Beispiel, das nicht ohne Aliase umgeschrieben werden kann (kann nicht GROUP BY DISTINCT).

Stellen Sie sich eine Tabelle mit dem Namen purchases vor, die Einkäufe aufzeichnet, die von customers in stores getätigt wurden, d.h.

SELECT DISTINCT customer_id, SUM(1)
  FROM ( SELECT DISTINCT customer_id, store_id FROM purchases)
  GROUP BY customer_id HAVING 1 < SUM(1);

..wird mit dem Fehler Every derived table must have its own alias brechen. Reparieren:

SELECT DISTINCT customer_id, SUM(1)
  FROM ( SELECT DISTINCT customer_id, store_id FROM purchases) AS custom
  GROUP BY customer_id HAVING 1 < SUM(1);

(Beachten Sie den Alias ​​AS custom).

13