3개의 테이블이 있습니다.
A라는 테이블은 회원정보
아이디 | 생년월일 | 성별 | 이름 | 고유번호 | ...그외 칼럼 |
test1 | 400101 | 1 | test1 | 1234 | |
test2 | 400102 | 2 | test2 | 5678 |
B라는 테이블은 신청관련 테이블
아이디 | 이름 | 고유번호 | 그외 칼럼 |
test1 | test1 | 1234 | .. |
test2 | test2 | 5678 | .. |
C라는 테이블은 기록현황 테이블
생년월일-성별 | 이름 | 그외칼럼 |
400101-1 | test1 | .. |
400102-2 | test2 | .. |
C 테이블의 생년월일-성별은
형식이 생년월일-성별입니다.
문자열이 가운데 추가되어있습니다.
이 3개의 테이블을 조인이나 어떤 방식을 통해
C라는 테이블에 있는 모든 정보를 읽어올 수 있을까요?
mssql 로 작성되었습니다.
문자열 결합부분만 조금 수정하시면 될거에요..
---쿼리시작---
with tblA (아이디,생년월일,성별,이름,고유번호) As
(
Select 'test1','400101','1','test1',1234 Union All
Select 'test2','400102','2','test2',5678
)
,tblB (아이디,이름,고유번호) As
(
Select 'test1','test1','1234' Union All
Select 'test2','test2','5678'
)
,tblC (생년월일_성별,이름,전화번호) As
(
Select '400101-1','test1','0101112222' Union All
Select '400102-2','test2','0169932222'
)
Select c.*
From tblA a
/*
Inner Join
tblB b
On a.아이디 = b.아이디
*/
Left Outer Join
tblC c
On a.생년월일 + '-' + a.성별 = c.생년월일_성별
And a.이름 = c.이름
---쿼리 끝---
뭔가 이상해보이네요..
C 테이블에도 ID 컬럼이 있어야
정상적으로 Join 이 가능할텐데요?
Join이야 억지로 시킬수도 있지만..
다음과 같은 경우가 발생할 소지가 있으니..
1) 생년월일 같음
2) 성별 같음
3) 이름 같음
1),2) 의 중복은 흔하게 일어날 빈도가 높습니다.
3) 의 조건까지 다 충족하는건 그리 많지는 않겠지만요..
참고만 하세요.
* 보탬 : 고유번호의 의미는 뭔가요?
아이디야 중복될일이 없으니, 그 컬럼만 PK로 쓰면 될듯한데
고유번호 도 유추되는 의미로는 Key 의 성격이 큰듯해서요.
* 보탬2 : 상기 조건상에서 B 테이블은 C테이블의 데이터를 가지고 오는데
필요는 없을듯하여 주석처리했습니다.