본문 바로가기
Study/DB

[MYSQL] 한글 별칭(aslias) 예외

by 검프 2021. 10. 8.

문제상황

https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_concat 에서 쿼리를 조작하여, 그림과 같은 결과를 얻고 싶었어요.

https://user-images.githubusercontent.com/48986787/136500715-9e0cfc56-1583-42d0-a215-b5522cb7c290.png

쿼리를 아래와 같이 짰을 때

SELECT p.ProductID as '상품 아이디', p.ProductName as '상품이름', sum(od.Quantity) as sum
FROM Products as p
JOIN OrderDetails as od on p.ProductID = od.ProductID
GROUP BY od.ProductID HAVING sum >= 200
ORDER BY sum desc;

아래의 결과가 나오게 돼요.

https://user-images.githubusercontent.com/48986787/136498357-85d85d29-a5bf-4033-8577-0f2ed00b34ac.png

"sum" 부분을 "총수량"으로 바꾸고 싶어서 아래와 같이 작성을 했는데,

SELECT p.ProductID as '상품 아이디', p.ProductName as '상품이름', sum(od.Quantity) as '총수량'
FROM Products as p
JOIN OrderDetails as od on p.ProductID = od.ProductID
GROUP BY od.ProductID HAVING '총수량' >= 200
ORDER BY '총수량' desc;

동일해 보이는 로직처럼 보이지만 결과는 처참해요. ㅠㅠ

https://user-images.githubusercontent.com/48986787/136500875-2692cb08-4e26-4c56-9a4c-920f6e92f48a.png

해결법

https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html MYSQL의 공식 문서를 살펴보니, 별칭을 지정하는 곳에서는 작은 따옴표(')를 이를 이용하여 로직을 사용하는 곳에선 백틱(`)를 사용해야 한다고 하네요.
그렇지 않으면 문자열 리터럴로 파악을 한다고 합니다!

즉, 아래와 같이 작성을 해야

SELECT p.ProductID as '상품 아이디', p.ProductName as '상품이름', sum(od.Quantity) as '총수량'
FROM Products as p
JOIN OrderDetails as od on p.ProductID = od.ProductID
GROUP BY od.ProductID HAVING `총수량` >= 200
ORDER BY `총수량` desc;

아래와 같이 제대로 된 로직이 실행이 돼요!

https://user-images.githubusercontent.com/48986787/136501357-065b8206-b39a-4841-85df-ebf7a6ae681e.png

결론

MYSQL 공식문서에 에러에 대한 부분이 잘 정리되어있네요 ㅎㅎ
역시 공식문서가 최고..!

댓글