JOIN 중복제거 와 조인 (distinct, rowid, cnt) > 온라인강의

본문 바로가기
 
 
 
오늘 222
어제 1,202
최대 2,526
전체 3,620,201

최근 방문자

1929
2036
1954
1859
1202
222
14 15 16 17 18 19
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

select * from g5_menu where me_use = '1' and me_link like '%lecture%'
온라인강좌 홈 > 온라인강좌 > 온라인강좌

Oracle | JOIN 중복제거 와 조인 (distinct, rowid, cnt)

페이지 정보

작성일2013-12-11 01:59 조회13,098회 댓글0건

본문

[ 방법1 ]

예제1 >
sql = "SELECT * FROM( "

sql = sql & " select * from( "

sql = sql & " select a.type,a.link_tab, b.title as title1, b.kwk, c.tik, d.para as imgpara,
sql = sql & " row_number() over (partition by a.article_seq order by a.article_a_no) cnt, a.ARTICLE_A_NO
 //요부분 이 as cnt하고 및에서 cnt="1"1로하면 중복없는조인
 // 하지만 문제는 다른테이블정보가 자세히보면 가득히 중복이라는거
 from aaa a, bbb b, ccc c
 where a.article_a_no= 'HDKJBO_2003_v7n1_001'
 and  a.article_seq = b.article_seq(+)
 and a.article_seq =c.article_seq(+)

 //그래서 조인을 여기서~ 그럼 완료
slq = sql &" ) b where b.cnt='1') WHERE ROWNUM >= 1 AND ROWNUM <= 20 "
//rownum 은 간단히처리~


예제2 >
select * from (select b.field4, row_number() over (partition by b.field1 order by b.field1) cnt, b.field1
from aaa a, bbb b where b.field1 = c.field1 and c.field2 = '"& idx &"') where cnt ='1' and rownum <= 100

예제3>
sql = sql &"select field4, field1, field3 from ( "
sql = sql &"Select rownum row_num, se.* FROM ( "
sql = sql &"select * from ( "
sql = sql &"select row_number() over(partition by b.field1 order by b.field1) cnt , b.field4, b.field1, b.field3 "
sql = sql &"from aaa a INNER JOIN bbb b ON a.field2=b.field1 where a.field5 = '462'  "
sql = sql &") where cnt ='1' "
sql = sql &") se "
sql = sql &") where row_num BETWEEN 1 AND 5"

[ 방법 2 ]

[ DISTINCT ]
     제시된 필드에 대한 중복체크 (n개 모두)
     고로...다수개의 필드중 하나의 필드에만 중복체크가 필요할때는 사용이 불가능하다.

    SELECT DISTINCT field1
       FROM table_name
     WHERE field1 = ''
ORDER BY field1


[ ROWID ]
     다수개의 필드중  단 하나의 필드에만 중복 체크를 하려할 경우

    SELECT  field1   -- 이넘의 중복건만 제거
                , field2
                , field3
       FROM table_name
     WHERE field1 = ''
         AND rowid in( select max(rowid) from table_name group by field1 )
ORDER BY field1


rowid는 데이터가 많을 경우 부하를 가져온다.
이때는 SUBSELECT를 사용한다.

select *
from tb_test
where reg_tm between start_tm and end_tm
and rowid in (select max(rowid) from tb_test group by field1)
// 이 구문은 rowid가 숫자일 경우에만 유효합니다.



관련자료
http://blog.naver.com/eoqufryghl/111357685
http://ky1004.blog.me/30039201009
http://blog.daum.net/mygunsan/1
http://eknote.tistory.com/901
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.


목록

Total 2,121건 1 페이지
온라인강의 목록
번호 제목
2121
2120
2119
2118
2117
2116
2115
2114
2113
2112
2111
2110
2109
MySQL Not Acceptable (up.2017-11-02 17:42) Hit.229
2108
2107
2106
2105
2104
2103
2102
2101
2100
2099
2098
2097
PHP 동영상(파일) 업로드 하기 (up.2017-10-25 22:44) Hit.362
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호:119-05-36414 (08394) 서울시 구로구 디지털로 242 한화비즈메트로1차 1502호
전화: 070-7600-3500 팩스:02-865-3528 개인정보관리:정창용 mail@happyjung.com 에스크로확인
개인정보취급방침
COPYRIGHT 2001~2017 해피정닷컴. All rights reserved. 통신판매신고:2014-서울구로-0074
 
모바일 버전으로 보기