451 votes

chaque table dérivée doit avoir son propre alias

Je cours cette requête sur MySQL

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

et il donne cette erreur:

Chaque table dérivée doit avoir son propre alias.

Qu'est-ce qui ne va pas ?

618voto

Paul Points 3876

Chaque table dérivée doit en effet avoir un alias.

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

Dans votre cas, la requête entière pourrait être remplacée par:

 SELECT ID FROM TT2
 

85voto

hometoast Points 6536

Je pense que cela vous demande de faire ceci:

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

Mais pourquoi écririez-vous cette requête en premier lieu?

20voto

Voici un autre exemple qui ne peut pas être réécrite sans alias ( ne peut pas GROUP BY DISTINCT).

Imaginez une table appelée purchases qui enregistre les achats effectués par customers à stores, c'est à dire que c'est un de nombreux de nombreux de la table et le logiciel a besoin de connaître les clients qui ont effectué des achats à plus d'un magasin:

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

..va rompre avec l'erreur Every derived table must have its own alias. Pour corriger:

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

( Note de l' AS custom alias).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X