관계가 없는 테이블 3개 조인 질문이요(질문수정-제가 짠 쿼리 봐주세요) 0 1 304

by 고등어통조림 [MySQL] [2019.07.25 11:44:27]


매핑테이블값.jpg (644,745Bytes)
콜테이블값.jpg (785,072Bytes)

어제 질문 드렸었는데... 그땐 제가 의도를 잘 몰라서 질문을 제대로 못 드린것 같습니다.

관계를 추가하는 대신 중간에 매핑테이블을 새로 만들어서 컬럼 형식이 같은 테이블을 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 하려고 생각중인데요...이게 맞는건지 모르겠지만...

 

 

 

by 고등어통조림 [2019.07.25 13:56:36]

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개가 나오네요..

 

이게 맞나요? 논리가 맞는지 모르겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입