아 머리가 아픕니다.
a라는 테이블에서 pk 1, pk2, pk3 을 갖고 i 라는 컬럼의 내용을
b라는 테이블에서pk 1, pk2, pk3 을 갖고 j 라는 컬럼의 내용을
a에 포함되거나 b에 포함된 결과를 하나라도 포함하면 결과를 뿌려줘야됩니다.
같이 포함되는 결과는 한줄에 두 테이블의 내용이 컬럼이 다르게 들어가야됩니다.
만드는 방법을 생각한것은
a라는 테이블의 내용과 b라는 테이블 내용을 없는 컬럼은 가짜로 null 값으로 컬럼생성후
union all 해서
group by 로 묶어 문자든 숫자든 상관없이 max 값으로 뽑을까 하는데 보통 이런경우 어떻게 처리하는지 궁금합니다.
예 :
select pk 1, pk2, pk3
,max(i)
,max(j)
from (
select pk 1, pk2, pk3
, i
, null as j
from a
union all
select pk 1, pk2, pk3
, null as i
, j
from b
)
group by pk 1, pk2, pk3
또하나의 경우는
위와 같은 내용인데 한 테이블에서 pk값이 누락된 경우입니다.
테이블1 은 pk 1, pk2, pk3에 컬럼 u
테이블2는 pk1, pk2 에 컬럼 w
에서 조회되야 되는 조건은 pk 1, pk2, pk3 에 컬럼 u, w 입니다.
테이블 1에 테이블 2가 없다면 u, w 는 0 값으로 컬럼에 내용을 넣어주고
테이블 1에 테이블 2가 포함된다면 (pk1, pk2 가 있다면)u, w 컬럼에 내용을 넣어주고
테이블 1에 없는 값이면 pk3을 강제로 0으로 생성해서 u 는 0, w는 값으로 뽑아야됩니다.
3개의 테이블을 이렇게 합집합을 구해야되는 상황입니다.
리스트업 기준 테이블이 3개고 이 3개중에 하나라도 값이 있다면 뿌려야되는데
이중 한테이블은 pk컬럼이 하나 누락되어 있고
그외 참조해야되는 테이블들이 6개 정도됩니다.
부탁드립니다. |