Study/DB
[MYSQL] 한글 별칭(aslias) 예외
검프
2021. 10. 8. 14:12
문제상황
https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_concat 에서 쿼리를 조작하여, 그림과 같은 결과를 얻고 싶었어요.
쿼리를 아래와 같이 짰을 때
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;
아래의 결과가 나오게 돼요.
"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://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;
아래와 같이 제대로 된 로직이 실행이 돼요!
결론
MYSQL 공식문서에 에러에 대한 부분이 잘 정리되어있네요 ㅎㅎ
역시 공식문서가 최고..!