A 테이블 B 테이블
idx name user_idx
box_01 box_02 box_03 box_04 box_05
1
사자 1 2 3
1 4 5
2 우산 2
1 2 5 4 3
3
시계 3 2 4
1 2 3
4 사과 4
3 5 1 2 4
5
포도 5 5 2
1 3 4
위와 같이 정규화를 거친 2개 테이블이 있습니다.
B
테이블을 select 해서
각 박스(box_01, box_02...)에 있는 물체의 이름을 표기해주고 싶은데
join을
어떻게 해야할지 모르겠습니다.
이런 경우는 어떤식으로 조인을 해야 하는건가요..?
------------------------------------------------------------------------------------------------------------------------------
다음과 같이 하시면 됩니다.
CREATE TABLE TABLE_A
(
IDX INT,
NAME
VARCHAR(100)
)
CREATE TABLE TABLE_B
(
USER_IDX INT,
BOX_1 INT,
BOX_2
INT,
BOX_3 INT,
BOX_4 INT,
BOX_5 INT
)
INSERT INTO TABLE_A
SELECT 1, '사자'
UNION ALL
SELECT 2,
'우산'
UNION ALL
SELECT 3, '시계'
UNION ALL
SELECT 4, '사과'
UNION
ALL
SELECT 5, '포도'
INSERT INTO TABLE_B
SELECT 1, 2, 3, 1, 4, 5
UNION ALL
SELECT 2, 1, 2, 5, 4, 3
UNION ALL
SELECT 3, 2, 4, 1, 2, 3
UNION ALL
SELECT 4, 3, 5, 1, 2, 4
UNION ALL
SELECT 5, 5, 2, 1, 3, 4
--이렇게 준비가 끝난 후에
--쿼리는 다음과 같습니다.
SELECT TABLE_B.USER_IDX,
MAX(CASE WHEN BOX_1 = IDX THEN NAME END) AS BOX_1,
MAX(CASE WHEN BOX_2 = IDX THEN NAME END) AS BOX_2,
MAX(CASE WHEN BOX_3 = IDX THEN NAME END) AS BOX_3,
MAX(CASE WHEN BOX_4 = IDX THEN NAME END) AS BOX_4,
MAX(CASE WHEN BOX_5 = IDX THEN NAME END) AS BOX_5
FROM TABLE_A CROSS JOIN TABLE_B
GROUP BY USER_IDX
으로 CROSS JOIN하시면 됩니다.