두개의 테이블에 조인 연결하는 쿼리문
본문
a 테이블에서 값을 가져 오면서 참조값을 b,c 두 테이블과 연결헤 값이 있는 테이블에서 가져오고 싶은데 방법을 모르겠네요.
예를들어 a 테이블에는 이름과 색상 번호가 있습니다.
name no
홍길동 1
임꺽정 2
황진이 3
b 테이블에는 번호와 색상이 있습니다.
no color
1 빨강
2 노랑
c 테이블에도 번호와 색상이 있습니다.
no color
3 파랑
이때 a 테이블을 SELECT 하면서 아래와 같은 결과가 필요합니다.
홍길동 빨강
임꺽정 노랑
황진이 파랑
즉, 조인을 하면서 먼저 b 테이블에 같은 번호가 있으면 거기서 색상을 찾고,
없으면 c 테이블에서 검색해서 찾고 싶습니다.
(동일한 번호가 b, c 두 곳에 모두 있지는 않습니다. 둘 중 한 곳에만 있습니다.)
쿼리를 어떻게 작성해야 하죠??
답변 3
SELECT A.name, BB.color
FROM A ,
(
SELECT no, color FROM b
UNION ALL
SELECT no, color FROM c
WHERE c.id = '1' // 변경이 필요한조건
) BB
WHERE A.no = BB.no
union 이나 union all 을 할때는 컬럼명을 명시하는게 좋습니다.
테이블마다 다른 컬럼(추가도 가능하거든요)
!-->b 테이블과 c 테이블을 union으로 결합해서 a 테이블과 join 하면 됩니다.
SELECT * FROM table_a AS ta JOIN
(SELECT * FROM table_b UNION SELECT * FROM table_c) AS tbc
ON ta.no = tbc.no
대략 이렇게 짜면 될 것 같습니다.
!-->감사합니다.
그런데 조건을 조금 더 까다롭게 할 때는 어떻게 하나요??
추가된 조건은 아래와 같습니다.
a 테이블에서 값을 가져 오면서 참조값을 b,c 두 테이블과 연결헤 값이 있는 테이블에서 가져오고 싶은데 방법을 모르겠네요.
예를들어 a 테이블에는 이름과 색상 번호가 있습니다.
name no
홍길동 1
임꺽정 2
황진이 3
b 테이블에는 번호와 색상이 있습니다.
no color
1 빨강
2 노랑
c 테이블에도 번호와 색상이 있습니다.
그런데 c 테이블에는 id 가 추가로 있습니다. id 에 따라 색상이 달라 질 수도 있습니다.
id no color
1 3 파랑
2 3 초록
이때 a 테이블을 SELECT 하면서 id=2 로 조건을 주면 아래와 같은 결과가 필요합니다.
홍길동 빨강
임꺽정 노랑
황진이 초록
즉, 조인을 하면서 먼저 b 테이블에 같은 번호가 있으면 거기서 색상을 찾고,
없으면 c 테이블에서 검색해서 찾고 싶습니다.
또한 c테이블에서 찾을 때는 id 조건에 따라 값을 찾아야 하구요.
처음부터 제대로 물어 보지 않아서 죄송합니다...ㅠ
쓰고 나니 그 조건이 필요해서...