Какая ошибка "Каждая производная таблица должна иметь свой собственный псевдоним" в 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);
(Обратите внимание на псевдоним AS custom
).