Какая ошибка "Каждая производная таблица должна иметь свой собственный псевдоним" в MySQL?
Я запускаю этот запрос в MySQL
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
и он дает эту ошибку:
Каждая производная таблица должна иметь свой собственный псевдоним.
Что вызывает эту ошибку?
Ответ 1
Каждая производная таблица (подзапрос AKA) должна иметь псевдоним. То есть каждый запрос в скобках должен иметь псевдоним (AS whatever), который может использоваться для ссылки на него в остальном внешнем запросе.
SELECT ID FROM (
SELECT ID, msisdn FROM (
SELECT * FROM TT2
) AS T
) AS T
В вашем случае, конечно, весь запрос может быть заменен на:
SELECT ID FROM TT2
Ответ 2
Я думаю, что он просил вас сделать это:
SELECT ID
FROM (SELECT ID,
msisdn
FROM (SELECT * FROM TT2) as myalias
) as anotheralias;
Но зачем писать этот запрос в первую очередь?
Ответ 3
Вот другой пример, который нельзя переписать без псевдонимов (не может GROUP BY DISTINCT).
Представьте таблицу с именем purchases, которая записывает покупки, сделанные customers в stores, то есть это много-много таблиц, и программное обеспечение должно знать, какие клиенты совершили покупки в более чем одном магазине:
SELECT DISTINCT customer_id, SUM(1)
FROM ( SELECT DISTINCT customer_id, store_id FROM purchases)
GROUP BY customer_id HAVING 1 < SUM(1);
.. будет ломаться с ошибкой Every derived table must have its own alias. Исправить:
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);