작성
·
142
1
강사님 안녕하세요.
풀이에서 같은 users 테이블을 두번 inner join 하시지요. (영상 11분)
저는 다음과 같이 작성했어요. (서브쿼리 부분만 옮겨 적을게요)
FROM
(SELECT Request_at, count(*) as total_count, SUM(CASE WHEN status = 'completed' THEN 0
ELSE 1
END) as cancel_count
FROM trips AS t
INNER JOIN users AS U
ON t.client_id = u.users_id OR t.driver_id = u.users_id
WHERE (t.request_at BETWEEN '2013-10-01' AND '2013-10-03') AND u.banned = 'No'
GROUP BY request_at) sub
같이 JOIN은 한번만 하고 ON을 두번 적어줬는데 값이 다르게 나오더라고요.
user_id 중 client_id과 driver_id에 각각 매치되는 부분을 OR로 연결하면 될 것 같은데... 왜 안되는지 잘 모르겠습니다.
설명 부탁드릴게요!
답변 1
1
FROM 절에서 JOIN으로 만들어지는 테이블 자체가 달라지기 때문입니다.
적어주신대로 JOIN을 하면 Trips 테이블의 ID당 2개씩의 row가 만들어지게 됩니다.
같은 컬럼(Users의 users_id)을 client_id와 붙인 것과, driver_id와 붙인 것, 이 둘을 모두 출력해줘야 하기 때문에요.
SELECT *로 확인해보시면 차이점을 아실 수 있을 거에요!