join 중복제거 40시간 째...헬프 좀요 ㅠ.ㅠ 0 1 4,743

by 청주띠기리 JOIN [2008.10.26 01:14:46]


a 테이블에

pk  || name

1         A

2         B

3         C

4         D

5         E

이렇게 있고...

 

b 테이블에

pk    ||       dansu

1                AA

1                AA

이렇게 있습니다..

select * from  a,  b where a.pk = b.pk(+)

했더니 결과 값이..

PK

1

1

2

3

4

5

이렇게 나옵니다.....  PK 가 겹치는 건 제거 하고, 가장  중첩 된 것중 상위에 있는 건 유지 하고, 하위에 중첩된 PK는 출력 안되게 하고 싶은데... 도움 좀 부탁드리겠습니다 ㅠ.ㅠ

by 김강환 [2008.10.26 05:24:44]
b테이블에서 중복을 제거 한 후 조인하시면 됩니다. 질문하시면서 간략하게 설명하시느라 b 테이블의 칼럼을 pk,dansu 두개만 예를 들으셔서 현재로서는 중복된 것중 무작위로 하나만 나오게 됩니다.

select pk,dansu,row_number() over(partition by pk order by 1) rm
from b

그러나 만일 b 테이블에 순서를 정할 수 있는 칼럼, 이를테면 등록일자(reg_dt) 같은 것이 있고 이 등록일자를 기준으로 하나만 가져오고 싶다 하면

select pk,dansu,row_number() over(partition by pk order by reg_dt) rm
from b

결국 아래처럼 하시면 됩니다.

select *
from a
,(
select pk,dansu from
from(
select pk,dansu,row_number() over(partition by pk order by reg_dt) rm
from b
)
where rm =1
)b
where a.pk = b.pk (+)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입