What is the error "Every derived table must have its own alias" in MySQL? What is the error "Every derived table must have its own alias" in MySQL? mysql mysql

What is the error "Every derived table must have its own alias" in MySQL?


Every derived table (AKA sub-query) must indeed have an alias. I.e. each query in brackets must be given an alias (AS whatever), which can the be used to refer to it in the rest of the outer query.

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

In your case, of course, the entire query could be replaced with:

SELECT ID FROM TT2


I think it's asking you to do this:

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

But why would you write this query in the first place?


Here's a different example that can't be rewritten without aliases ( can't GROUP BY DISTINCT).

Imagine a table called purchases that records purchases made by customers at stores, i.e. it's a many to many table and the software needs to know which customers have made purchases at more than one store:

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

..will break with the error Every derived table must have its own alias. To fix:

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 the AS custom alias).