• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

리트코드 Consecutive Numbers 질문드립니다!

21.06.25 12:41 작성 조회수 77

1

SELECT L.Id , L.num, L1.num

FROM Logs L inner JOIN LOGS L1

ON L.Id = L1.Id+1

------------------------------------

SELECT L.Id , L.num, L1.num

FROM Logs L inner JOIN LOGS L1

ON L.Id+1 = L1.Id

------------------------------------

비슷한 문제가 나올때마다 너무 헷갈리네요.... 두 쿼리의 차이점은 JOIN의 ON절에 사용하는 조인조건을 어떤테이블에 적용해야 하느냐 입니다.

ID와 ID+1한 것이 같다고 쓴 부분에 대해 생각해보면
두 경우 다 ID가 2부터 출력되어야 하는것 아닌가요?

값이 왜 다르게 나오는지 모르겠습니다. 어떻게 생각하면 좀 쉬울까요?

답변 1

답변을 작성해보세요.

0

안녕하세요 함문주님, 답변 드립니다.

말씀해주신 것처럼 두 쿼리는 +1을 어느 테이블의 Id에 했는지만 다르고,
첫번째 쿼리는 Id가 2부터, 두번째 쿼리는 Id가 1부터 출력됩니다.

아시다시피 JOIN 한 결과에 따라 SELECT 절에 있는 컬럼들이 출력됩니다.
첫번째 쿼리는 L1의 Id에 +1을 하여 L의 Id와 JOIN하고, L의 Id를 출력합니다.
반면 두번째 쿼리는 이와 반대로 L의 Id에 +1을 하여 L1의 Id와 JOIN했지만 똑같이 L의 Id를 출력합니다.
혹시 문제점을 아시겠나요?

두번째 쿼리에서 Id가 2부터 출력되게 하려면 L.Id가 아닌  L1.Id를 출력해야 합니다.
L.Id +1 이 L1.Id와 같으므로 L.Id가 1일때 L2.Id 는 2, L.Id가 2일때 L2.Id는 3이 출력됩니다.
따라서 지금처럼 L.Id를 출력하면 값이 1부터 나오게되고, L1.Id를 출력해야 원하시는 대로 2부터 결과가 나옵니다.

답변이 도움이 되셨길 바랍니다 :)