이 쿼리를 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
별명에 유의하십시오 ).