database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 31205 게시물 읽기
No. 31205
join 관련 질문드려요
작성자
hooney
작성일
2018-12-13 12:37:41ⓒ
2018-12-13 12:38:39ⓜ
조회수
510

 

table tb1            table tb2

pk col1  col2      code  name

1   1     2           1      text1

                        2      text2

위와 같이 테이블 2개가 있습니다.

테이블 tb1를 select 할때 

col1, col2 컬럼에 1과 2 같은 코드가 아닌 table tb2 의 "code" 를 조인하여 각각 "name" 값을 불러 오려고 하는데요.

select   a.pk,

             b.name as col1,

             c.name as col2

    from  tb1 a

    left join tb2 b   on a.col1 = b.code

    left join tb2 c    on a.col2 = c.code

  where   a.pk = 1

와 같이 하면 

pk   col1      col2 

1     text1     text2

처럼 잘 불러오긴 하는데....

여기서 문제는 저 tb2 테이블의 조인을 필요한만큼 여러번 하는게 아닌 한번의 조인으로

서로 다른 코드값에 해당하는 name 데이터를 불러올 수 있는 방법은 없는지 궁금합니다.

 

 

이 글에 대한 댓글이 총 2건 있습니다.

한번만 조인하려면 IN 조건으로 조인하면 됩니다.
다만 이렇게 하면 결과 행이 늘어나겠네요.
이름이 옆으로 나열되는게 아니라 밑으로 나열됩니다.
똑같은 결과를 얻으려면?
Group By 를 이용해 늘어난 행을 다시 합쳐야 합니다.
1. 여러번 조인하는게 나을지?
2. 늘렸다가 합치는 한이 있더라도 한번만 조인하는게 나을지?
한번 고민해 보세요.


-- 1. 여러번 조인
SELECT a.pk
     , b.name AS col1
     , c.name AS col2
  FROM tb1 a
  LEFT JOIN tb2 b ON a.col1 = b.code
  LEFT JOIN tb2 c ON a.col2 = c.code
 WHERE a.pk = 1
;


-- 2. 한번만 조인 : 결과 형태가 달라짐 --
SELECT a.pk
     , b.code
     , b.name
  FROM tb1 a
  LEFT JOIN tb2 b
    ON b.code IN (a.col1, a.col2)
 WHERE a.pk = 1
;


-- 3. 행을 열로 바꾸기(PIVOT) --
SELECT a.pk
     , MIN(CASE b.code WHEN a.col1 THEN b.name END) AS col1
     , MIN(CASE b.code WHEN a.col2 THEN b.name END) AS col2
  FROM tb1 a
  LEFT JOIN tb2 b
    ON b.code IN (a.col1, a.col2)
 WHERE a.pk = 1
 GROUP BY a.pk
;

마농(manon94)님이 2018-12-13 13:18:21에 작성한 댓글입니다.
이 댓글은 2018-12-13 13:18:41에 마지막으로 수정되었습니다.

 마농 - 아 정말 감사합니다^^

hooney님이 2018-12-13 14:38:28에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
31208쿼리 응답속도 질문! [1]
권순환
2018-12-24
647
31207mariadb 서비스 시작시 오류메시지가 표시 [2]
매수신호
2018-12-19
649
31206테이블 사이즈 문의 [1]
지나가다
2018-12-13
542
31205join 관련 질문드려요 [2]
hooney
2018-12-13
510
31204MYSQL 자동형변환으로 인한 조인 조건 문제 [1]
권순환
2018-12-12
500
31203select table_name쿼리문 질문이요 ㅠㅠ [7]
데베너무어려워요
2018-12-07
553
31202[속도문제] 증가키 구조 테이블 레코드 삭제 or 플레그 비트?? [1]
권순환
2018-12-04
434
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.069초, 이곳 서비스는
	PostgreSQL v11.3으로 자료를 관리합니다