[mysql] MySQL에서 “파생 테이블마다 고유 한 별칭이 있어야합니다”라는 오류는 무엇입니까?

이 쿼리를 MySQL에서 실행하고 있습니다.

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

이 오류가 발생합니다.

모든 파생 테이블에는 고유 한 별칭이 있어야합니다.

이 오류의 원인은 무엇입니까?



답변

모든 파생 테이블 (AKA 하위 쿼리)에는 실제로 별칭이 있어야합니다. 즉, 대괄호 안에있는 각 쿼리에는 별칭 ( AS whatever) 이 주어져야하며 , 나머지 외부 쿼리에서이를 참조하는 데 사용할 수 있습니다.

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

물론 귀하의 경우 전체 쿼리를 다음과 같이 바꿀 수 있습니다.

SELECT ID FROM TT2


답변

나는 이것이 당신에게 이것을 요구한다고 생각합니다.

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

그러나 왜이 쿼리를 처음에 작성하겠습니까?


답변

별명없이 다시 작성할 수없는 다른 예는 다음과 같습니다 (ca n’t GROUP BY DISTINCT).

at에서 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별명에 유의하십시오 ).


답변