database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1726 게시물 읽기
No. 1726
똑같은 행이 두개 존재할 때 한 행만 지우는 방법
작성자
초보
작성일
2008-09-25 18:15
조회수
10,942

데이터가 중복되서 들어가게 되었을때, 한 행만 지우는 쿼리를 알 수 있을까요?


오라클은 row_id가 있어서 구분해서 지울 수가 있는데 DB2는 어떤 식으로 지우나요?

이 글에 대한 댓글이 총 3건 있습니다.

c1으로 중복된 데이터를 뺄 경우로 해봤습니다.

db2 "select c1,c2, rownumber() over (partition by c1)  from t1 "

C1          C2          3                  
----------- ----------- --------------------
          1           1                    1
          1           1                    2
          1           1                    3
          2           1                    1
          2           1                    2
          2           1                    3
          3           2                    1
          3           2                    2
          3           2                    3

db2 "export to t1.ixf of ixf select c1,c2 from (select c1,c2, rownumber() over (partition by c1)rn  from t1)t1 where rn=1 "

db2 "import from t1.ixf of ixf replace_create into t1_new"

db2 rename table t1 to t1_old 
db2 rename table t1_new to t1

t1_old는 확인 후 drop 


row_id로 row를 찾을 수는 없습니다. 행이 모두 일치하는 경우는 위와 같이 olap function을 사용해서 한 row로 export를 받고 중복 데이터를 모두 삭제 후 import를 해주어야 합니다.




 

조는 냥이님이 2008-09-26 09:43에 작성한 댓글입니다.
이 댓글은 2008-09-26 09:50에 마지막으로 수정되었습니다. Edit

DELETE FROM (SELECT * FROM Table_Name WHERE ~ FETCH FIRST n ROW(S) ONLY);


test:/home/hena>db2 "select * from var"

AAA           

---------------

ABCDEFG       

ABCDEFG       

ABCDEFG       

  3 record(s) selected.

test:/home/hena>db2 "delete from (select * from var where AAA='ABCDEFG' fetch first 1 row only)"

DB20000I  The SQL command completed successfully.

test:/home/hena>db2 "select * from var"                                                        

AAA           

---------------

ABCDEFG       

ABCDEFG       

  2 record(s) selected.

test:/home/hena>

HENA님이 2008-09-26 17:16에 작성한 댓글입니다. Edit


fetch first, olap 다 되네요 ^^



db2 "select * from t1 where c1=3 and c2=2"

C1          C2        
----------- -----------
          3           2
          3           2
          3           2
          3           2
          3           2

db2 "delete from (select t1.*,rownumber() over(partition by c1,c2)rn from t1 where c1=3 and c2=2) where rn>1 "

조는 냥이님이 2008-09-26 17:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1730교육 받으실 분 찾습니다.
최광식
2008-10-06
9795
1729라이브러리 파일 위치 질문드립니다. [2]
이도희
2008-10-02
9846
1727db2에서 날짜끼리 차이 계산하는 방법 [1]
리사
2008-09-26
20366
1726똑같은 행이 두개 존재할 때 한 행만 지우는 방법 [3]
초보
2008-09-25
10942
1725reorg 명령 질문드립니다. [2]
이도희
2008-09-25
11754
1724JDBC 커넥션 질문 [1]
김황만
2008-09-24
10530
1723SNAPSHOT_APPL_INFO 테이블 함수의 client_platform [2]
이도희
2008-09-22
9746
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다