테이블 조인 질문드립니다. 0 3 653

by 성공한다 [2019.01.15 20:49:26]


테이블 1 :

이름 취미 특기
홍길동 A aa
이순신 B  
안중근 C cc
김유신 D dd

이순신의 특기는 null값입니다.

테이블 2 :

취미코드 취미이름 특기코드 특기이름
A 자전거 aa 컴퓨터
B 독서 bb 수학
C 태권도 cc 영어
D 취침 dd 국어

이 두개의 테이블을 조인할때 이순신의 특기는 null인데 취미로 대신하여 취미,특기가 모두 B로 출력 하고 싶습니다.

결과값 :

이름 취미 특기
홍길동 자전거 컴퓨터
이순신 독서 독서
안중근 태권도 영어
김유신 취침

국어

 nvl을 이용하여 decode를 했는데 조인이 안먹히는거 같네요ㅠ

 

by 마농 [2019.01.16 08:32:37]

테이블 설계가 이상하네요.
테이블1 의경우 취미나 특기가 여러개일 수 있다는 것이 고려되지 않았습니다.
테이블2 의경우 취미와 특기가 각각의 다른 테이블로 나누어져야 할 것 같습니다.
즉,
테이블1 은
 - 이름 테이블과 특기 테이블의 1:M 관계로 2개 테이블로 나누어야 합니다.
 - 취미, 특기는 하나만 선택 가능하다는 제약조건이 있다면 그대로 두셔도 됩니다.
테이블2 는
 - 취미코드와 특기코드 각각 두개의 테이블로 나누거나
 - 하나의 테이블에 코드 앞에 구분항목(취미/특기)을 앞에 두어 관리하거나


by 우리집아찌 [2019.01.16 10:44:16]

테이블2는 PK가 취미코드라면 취미 하나당 특기하나밖에 가질수없습니다.

테이블을 2개(취미,특기)로 나누셔야 합니다.


by 홍길덩이 [2019.01.16 10:46:55]

테이블 구조를 바꾸셔야 되겠지만, 답변만 드릴게요.. 

 

WITH A AS
    (
        SELECT '홍길동' AS "이름", 'A' AS "취미", 'aa' AS 특기 FROM DUAL UNION ALL
        SELECT '이순신' AS "이름", 'B' AS "취미", '' AS 특기 FROM DUAL UNION ALL
        SELECT '안중근' AS "이름", 'C' AS "취미", 'cc' AS 특기 FROM DUAL UNION ALL
        SELECT '김유신' AS "이름", 'D' AS "취미", 'dd' AS 특기 FROM DUAL
    )
    ,B AS
    (
        SELECT 'A' AS "취미코드", '자전거' AS "취미이름", 'aa' AS "특기코드", '컴퓨터' AS "특기이름" FROM DUAL UNION ALL
        SELECT 'B' AS "취미코드", '독서' AS "취미이름", 'bb' AS "특기코드", '수학' AS "특기이름" FROM DUAL UNION ALL
        SELECT 'C' AS "취미코드", '태권도' AS "취미이름", 'cc' AS "특기코드", '영어' AS "특기이름" FROM DUAL UNION ALL
        SELECT 'D' AS "취미코드", '취침' AS "취미이름", 'dd' AS "특기코드", '국어' AS "특기이름" FROM DUAL 
    )
    SELECT "이름", "취미이름", DECODE("특기",NULL,"취미이름","특기이름") AS "특기이름"
    FROM A,B
    WHERE A."취미" = B."취미코드"

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