it-swarm.com.ru

В чем ошибка «Каждая производная таблица должна иметь свой собственный псевдоним» в MySQL?

Я выполняю этот запрос на MySQL

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

и это дает эту ошибку:

Каждая производная таблица должна иметь свой псевдоним.

Что вызывает эту ошибку?

336
silverkid

Каждая производная таблица (подзапрос AKA) должна действительно иметь псевдоним. То есть каждому запросу в скобках должен быть присвоен псевдоним (AS whatever), который можно использовать для ссылки на него в остальной части внешнего запроса.

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

В вашем случае, конечно, весь запрос можно заменить на:

SELECT ID FROM TT2
467
Paul

Я думаю, что он просит вас сделать это:

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

Но зачем писать этот запрос в первую очередь?

73
hometoast

Вот другой пример, который нельзя переписать без псевдонимов (не может 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).

13
Neil Stockbridge