어제 질문 드렸었는데... 그땐 제가 의도를 잘 몰라서 질문을 제대로 못 드린것 같습니다.
관계를 추가하는 대신 중간에 매핑테이블을 새로 만들어서 컬럼 형식이 같은 테이블을 2개의 테이블 사이에 뒀어요
그래서 tbl_CallDriverMapping 에는 tbl_drivers와 tbl_call 에 있는 컬럼 중 형식과 이름이 같은 컬럼을 모두 가지고 있게 새로 만들었습니다. (이렇게 하는게 맞는지 모르겠어요....)
현재 tbl_CallDriverMapping, tbl_drivers, tbl_call 3개 테이블을 조인하고 싶어서
제가 쿼리를 짰는데... 일단 결과로는 3개의 테이블의 모든 컬럼을 다 가지고는 오는데... 결과값(행) 이 아무것도 안 나타나서
조인이 제대로 된것 같지가 않아요...
현재 drivers와 call 2개엔 레코드가 그래도 10개씩은 들어 있구요..
tbl_CallDriverMapping 엔 아무 레코드가 들어있지 않아서 결과값이 안 나오는걸까 싶어서
2개의 테이블의 값과 같은 값으로 1개의 레코드를 업데이트 했는데도... 결과값이 아무것도 안 나타나요
SELECT *
FROM tbl_call
INNER JOIN tbl_CallDriverMapping
ON tbl_call.C_INDEX = tbl_CallDriverMapping.C_INDEX
INNER JOIN tbl_drivers
ON tbl_CallDriverMapping.D_ID = tbl_drivers.D_ID;
조인이 잘 못된걸까요?
제가 뭔가 개념이해를 잘못해서... 문제가 있는건지...
----------------------------------------------------------
다른 분께서
tbl_call 테이블이 콜 요청된 테이블이면
tbl_CallDriverMapping 은 요청된 콜에 대해 운전자가 배차되면 들어가는 테이블이니
그러면 inner join이 아니고 outer join 해야되는거 같다라고 하시는데...
어떻게 아우터 조인을 해야 하나요?
아우터 조인을 거의 써본적이 없어서요 ㅠㅠ
SELECT *
FROM tbl_call
lefe outer JOIN tbl_CallDriverMapping
ON tbl_call.C_INDEX = tbl_CallDriverMapping.C_INDEX
했을 경우에
tbl_drivers 테이블에서 D_ID, D_NAME 도 가져오고 싶은데...
조인이 안 되어서 추가로 오른쪽 조인도 걸어봤거든요(tbl_drivers)
SELECT *
FROM tbl_call
left outer JOIN tbl_CallDriverMapping
ON tbl_call.C_INDEX = tbl_CallDriverMapping.C_INDEX
right outer join tbl_drivers
on tbl_CallDriverMapping.D_ID = tbl_drivers.D_ID;
했더니
결과가 12개가 나옵니다;;;
저는 기준은 tbl_call 기준으로... 현재 콜예약이 6개가 있으니 6개만 나왔음 좋겠거든요...
어떻게 해야 할까요?
아직 로직이 다 짜여있지 않은 상태인데... 향후 구상은
콜테이블이 먼저 채워지고, 뷰에서 수동으로 기사들을 배차시켜주고나서 콜테이블의 C_CODE 값을 배차로 update하고 매핑 테이블에 insert 하려고 생각중인데요...이게 맞는건지 모르겠지만...
SELECT *
FROM tbl_call
left outer JOIN tbl_CallDriverMapping
ON tbl_call.C_INDEX = tbl_CallDriverMapping.C_INDEX
left outer join tbl_drivers
on tbl_CallDriverMapping.D_ID = tbl_drivers.D_ID;
3번째 테이블을 rignt outer join -> left outer join 으로 바꿨더니
콜테이블에 들어있는 콜 6개를 기준으로 해서 결과값이 6개가 나오네요..
이게 맞나요? 논리가 맞는지 모르겠습니다.