1:N 테이블 조인 관련 질문이 있습니다. 0 2 890

by 키에리안 [SQL Query] mysql join [2020.10.28 16:59:10]


안녕하세요. query 를 짜다가 막히는부분이 있어서 질문드립니다.

tbl_table_a

idx a b
1 0 0
2 1 1
3 2 2

 

tbl_table_b

idx type c
1 1 10
1 2 20
2 2 20
2 3 30
3 1 40

 

tbl_table_a 와 tbl_table_b 는 1:N의 관계 입니다.

query1: SELECT idx, a, b FROM tbl_table_a WHERE idx = 1;
query2: SELECT c FROM tbl_table_b WHERE idx = 1 AND type = 1;

query1 과 query2 의 내용을 합치고 싶습니다.

query1의 결과는 항상 있어야 하므로 LEFT JOIN 을 사용했는데 원하는 결과가 나오지 않습니다. ㅠㅠ

아래는 제가 사용한 query 입니다.

-- tbl_table_b 에 idx = 1, type =1 인 정보가 있어서 제대로 출력됨.

SELECT a.idx, a.a, a.b, b.c FROM tbl_table_a a LEFT JOIN tbl_table_b b ON a.idx = b.idx WHERE a.idx = 1 AND b.type = 1;

-- tbl_table_b 에 idx = 2, type = 1 인 정보가 없어서 tbl_table_a의 정보조차 출력이 안됨

SELECT a.idx, a.a, a.b, b.c FROM tbl_table_a a LEFT JOIN tbl_table_b b ON a.idx = b.idx WHERE a.idx = 2 AND b.type = 1;

 

제가 원하는 결과를 table 로 구성해보면 이렇습니다. 

idx a b c
1 0 0 10
2 1 1 NULL
3 2 2 40

 

조언 부탁드립니다 ㅠㅠ

by 마농 [2020.10.28 17:27:14]

1. 조건절의 위치에 따라 결과가 다르게 나올 수 있습니다.
 - 검색조건은 WHERE 절에
 - 조인조건은 ON 절에
2. 쿼리 작성 습관
 - 쿼리는 한줄에 쭉 쓰지 마시고
 - 의미별로 나누어서 내려쓰기, 들여쓰기 하세요

SELECT a.idx
     , a.a
     , a.b
     , b.c
  FROM tbl_table_a a
  LEFT JOIN tbl_table_b b
    ON a.idx  = b.idx
   AND b.type = 1    -- 요기
 WHERE a.idx  = 2
;

 


by 키에리안 [2020.10.28 17:37:27]

언제나 답글 감사합니다. dba 가 아니고 서버프로그래머라서 인터넷에서 필요한 내용만 검색해서 공부하다보니 JOIN 조건을 여러개 지정할 수 있다는걸 몰랐었습니다. 자문자답으로 SELECT c FROM tbl_table_b WHERE idx = 1 AND type = 1 한 결과를 join 으로 썻었는데 조언 덕분에 query를 훨씬 깔끔하게 고칠수 있게 되었습니다. 감사합니다.

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