¿Cuál es el error “Cada tabla derivada debe tener su propio alias” en MySQL?

Estoy ejecutando esta consulta en MySQL

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

y está dando este error:

Cada tabla derivada debe tener su propio alias.

¿Qué está causando este error?

Cada tabla derivada (AKA subconsulta) debe tener un alias. Es decir, cada consulta entre paréntesis debe tener un alias (como AS whatever ), que se puede utilizar para referirse a él en el rest de la consulta externa.

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

En su caso, por supuesto, toda la consulta podría ser reemplazada por:

 SELECT ID FROM TT2 

Creo que te está pidiendo que hagas esto:

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

¿Pero por qué escribirías esta consulta en primer lugar?

Aquí hay un ejemplo diferente que no puede ser reescrito sin alias (no puede GROUP BY DISTINCT ).

Imagine una tabla llamada purchases que registra las compras realizadas por los customers en las stores , es decir, es una tabla de muchos a muchos y el software necesita saber qué clientes han realizado compras en más de una tienda:

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

..se romperá con el error Every derived table must have its own alias . Arreglar:

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

(Tenga en cuenta el alias AS custom ).