프로그래머스/My SQL

업그레이드 할 수 없는 아이템 구하기

싱싱한복초이 2024. 12. 7. 10:42

https://school.programmers.co.kr/learn/courses/30/lessons/273712

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제]

더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.

 

[나의 풀이]

SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I
WHERE NOT EXISTS (SELECT 1
                  FROM ITEM_TREE T
                  WHERE I.ITEM_ID = T.PARENT_ITEM_ID)
ORDER BY ITEM_ID DESC;

 

[다른 풀이]

 

1)

SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID 
                      FROM ITEM_TREE 
                      WHERE PARENT_ITEM_ID IS NOT NULL)
ORDER BY ITEM_ID DESC;

 

 

(틀린 풀이)

SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID 
                      FROM ITEM_TREE)
ORDER BY ITEM_ID DESC;

처음에 이렇게 코드를 짰는데 아무것도 반환되지 않았다.

챗지피티한테 물어보니

이렇게 답을 했다. 그리고 해결책으로 WHERE PARENT_ITEM_ID IS NOT NULL을 추가하라고 알려줬다.

 

"not in은 and 연산을 진행하므로 이를 고려해 null값은 제거 후 not in 연산을 해야한다."

 

-참고

https://velog.io/@jerry_bak/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-SQL-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%95%84%EC%9D%B4%ED%85%9C-%EA%B5%AC%ED%95%98%EA%B8%B0

 

[프로그래머스 SQL] 업그레이드 할 수 없는 아이템 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/273712더이상 업그레이드 할 수 없는 아이템 조회하기처음엔 이렇게 작성했었다. parent_item_id에 있지 않는 데이터는 더이상 업그레이드를 할 수

velog.io

 

2)

SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY 
FROM ITEM_INFO A 
LEFT JOIN ITEM_TREE B ON A.ITEM_ID = B.PARENT_ITEM_ID 
WHERE B.PARENT_ITEM_ID IS NULL 
ORDER BY ITEM_ID DESC;