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
운영게시판
최근게시물
Sybase Q&A 1238 게시물 읽기
No. 1238
동일한 레코드 삭제
작성자
HAVE
작성일
2005-07-28 19:16
조회수
6,858

안녕하세요 고수님들~

사이베이스에 대한 경험이 없어서 참 어렵네요

한 테이블에 똑같은 레코드가 있어서 둘중 하나를 지우려구 하는데요

대상 건수가 한 20000건 되네요

일일이 where절에 조건 줘서 지우기엔 너무 많아서요

키값으로 그룹핑을 해서 각 키별로 number(*)를 주고

number(*) = 2인 것만 지우면 될거같은데

number(*)라는 함수는 키별로 그룹핑이 안되네요 ㅠ.ㅠ

이와 비슷한 작업 하셨던 님들

힌트좀 주세요~~~

 

감사합니다.

 

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

[가정] 중복된 데이터가 있는 table name : aa , dbname : adb라고 하고

[user define]

copy_aa : select into 시 target tbl name, 중복데이터 없음.

atbl :  sub query 용 alias

aa_old :  중복 데이터 가진 원본 aa 테이블 rename용 tbl name

vw_aa : 중복 데이터 없는 view name

vw_aa.bcp :  OS  아스키 파일로, vw_aa 벌크카피본

|| : 컬럼 구분자로 사용한 식별자

 

[선택 1.] 데이타 베이스 공간이 충분하다면

/** select into table copy **/

select * into copy_aa

from (select distinct * from aa) atbl

go

/** switch table name **/

sp_rename aa, aa_old

sp_rename copy_aa, aa

/** bulk copy 라서 데이터만 옮겨 왔으므로, constraint, index 등등 확인해서 만들어 준다.

**/

..(생략)..

/** 원본 table 삭제 **/

drop table aa_old

 

[선택 2.] 데이터 베이스 공간이 부족하다면

/** 원하는 view를 만든다. **/

create view vw_aa as

select distinct * from aa

go

/** OS 프롬프트에서, BCP로 view를 다운 받음 **/

#bcp adb..vw_aa  out  vw_aa.bcp  -c  -t"||" -Usa

/** sql 모드에서, aa 테이블 내용 삭제 .

 ** bcp로 받은 데이타 꼭 확인후 truncate 시키세요

**/

truncate table aa

/** OS 프롬프트에서, BCP로 데이타 로드, 자료 양이 많다면 분할 로드 (-b rownum 옵션 추가) **/

#bcp adb..aa  in  vw_aa.bcp - c -t"||" -Usa 

 

 

소심낙타님이 2005-07-29 04:14에 작성한 댓글입니다.
이 댓글은 2005-07-29 09:47에 마지막으로 수정되었습니다. Edit

Number(*) 를 쓰시는 걸보니 IQ 라고 생각이 되네요..

아래를 보시면 아시겠지만, rowid(tbl) 은 각 row 별루 고유값을 가집니다. 이특성을 이용하시면 되고요..

아니면.. distinct 하게 값을 뽑아 다시 insert 를 하셔도 되겠죠.

 

일단 test 를 위한 Table 을 생성

create table AA(
CustNo char(7)
)
;

 

일부로 dup 이 발생하도록.. 고객번호 앞쪽만 짤라서 넣었습니다.
insert into AA
select substing(CustNo,1,6) from 고객테이블


 

 

select count(*), count(distinct CustNo) from AA

73923 건 / 21644 건

 

select count(*)
   from AA a ,( select CustNo , MIN(rowid(AA)) MINROW
                        from AA
                      group by CustNo ) b
where a.CustNo = b.CustNo
  and rowid(a) = b.MINROW

 

21644 건

delete from AA
from AA a, ( select CustNo , MIN(rowid(AA)) MINROW
       from AA
     group by CustNo ) b
where a.CustNo = b.CustNo
  and rowid(a) > b.MINROW


select count(*) from AA

 

21644 건..  ^^

 

아 그리고 혹시나 해서요.. 이런 작업을 하시기 전에 중요 data 라면 꼭 copy 본을 만드시고. . 작업하시기 바랍니다..

coolrock님이 2005-07-29 09:44에 작성한 댓글입니다.
이 댓글은 2005-07-29 09:51에 마지막으로 수정되었습니다. Edit

 

coolrock 님 답이 정답인듯 싶네요... 쿨 합니다. ^^

 

 

언제 ASE 에서 벗어나려나....   이런 답글 보면 IQ 공부해보고싶다는

소심낙타님이 2005-07-29 10:08에 작성한 댓글입니다. Edit

구~~~뜨

님들 정말 훌륭하십니다.

distinct -> 다시 insert

ㅋㅋ 왜 이 단순한 방법을 생각못하고 문제있는

2만건의 데이타만 바라보았을까요

coolrock님 방법대로 rowid 를 사용해서 해결했습니다.

정말 감솨~~ ^.^

 

 

HAVE님이 2005-08-01 13:31에 작성한 댓글입니다. Edit

 

delete 

  from table_A a
  from table_A b 
 where rowid(a) > rowid(b)
   and a.id = b.id
;

 

일케 하심됨.

놀놀이님이 2005-08-08 13:10에 작성한 댓글입니다.
이 댓글은 2005-08-08 13:12에 마지막으로 수정되었습니다. Edit

도움많이 되었습니다.

감사합니다.

uhoo님이 2006-03-09 10:37에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1242ESQL C 프로그램에서 데이타베이스 연결 [1]
궁금이
2005-08-04
3625
1240C프로그램에서 text 타입 사용하기 [2]
초보자
2005-08-01
3632
1239급한 질문 하나 올립니다. [1]
배움이
2005-07-29
3652
1238동일한 레코드 삭제 [6]
HAVE
2005-07-28
6858
1237dump 시 오류. [1]
lockzii
2005-07-28
4369
1235DB에서 특정필드가 있는table들을 검색할수있을까요? [3]
초보자
2005-07-27
3776
1234outer join 시 에러.. [2]
류지준
2005-07-27
4898
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다