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
운영게시판
최근게시물
MS-SQL Q&A 1994 게시물 읽기
No. 1994
겹치는 데이터 삭제...제목이 딱없네요.한번만 봐주세요
작성자
초보자
작성일
2005-05-30 19:09
조회수
3,261

하나의 컬럼에

1234 9876 5678

위에처럼 한컬럼에 하나의 항목을 나타내는(4자리로표현)항목기호가 연속적으로 들어갑니다.

단 매우 유동적입니다.1234가들어갈수도있고 12341234이렇게 두개가 들어갈수도있고요

그래서 서브스트링으로 자리수를 구하고 4자리씩 짤라서 가져왔습니다.

여기까진 좋은데요 문제는 저 뽑아온 4자리 항목을 가지고 다른테이블에 가서 그 제목과 필요한

내용들을 가져와야합니다.

여기서

위에서 뽑아온 테이터 다른테이블에서 뽑아올데이터

1234 0987

1234 0988

1234 0989

 

위에서 뽑아온 테이터 다른테이블에서 뽑아올데이터

9876 0986(틀림)

9876 0988(중복)

9876 0989(중복)

위에서 뽑아온 테이터 다른테이블에서 뽑아올데이터

5678 0985(틀림)

5678 0988(중복)

5678 0989(중복)

원하는 결과

1234

9876

5678

 

*중복된걸 제거하고 나머지항목만출력

0985

0986

0987

0988

0989

전에 올렸던 내용입니다. 한분이 정규화를 무시한 노가다가 보인다고 하셨는데요

지금 만들고자 하는게 아니라 ㅡㅡ 만들어져있는(대략적으로 3~4년)

그래서 지금 제가 다시 함 해보려고하는데요 지금 당장은 이 디비를 사용해야 해서요

그럼 다시한번 리플달아주시면 감사하겠습니다.

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

글의 내용이 잘 이해가 되지 않는걸요?

어디서 어떻게 뽑아올리며 다른 테이블이란 또 어디입니까?

거기선 또 어떻게 뽑아올렸나요?

 

문제상황을 좀더 명확히 하시면

같이 고민하는데 도움이 되지 않을까요?

 

정규화의 실패로 노가다를 할지 않할지는 아직 잘 모르지만

적어도 지금 적어준 글로는 이해하기가 굉장히 힘이 드네요 ^^

 

예를 들면 TableA의 구조는 이러이러하고 TableB의 구조는 이러저라하며, TableC의 구조는 저러저러하다.

그런데 TableA에서 A라는 칼럼의 Data는 이렇게 구성되어 있는데

그걸 TableB에서 중복체크를 하기 위해 이런 쿼리를 구성했다.

 

이렇게 자세하게 풀어주면 아마도 글을 읽는 분이 글을 쓰신 분의 상황을 좀더 빠르게 이해하고 작업의 이해도 훨씬 높지 않겠습니까?

무슨 질책이나 그런건 아니니 너무 태클은 말아주십시요.

같이 고민하고자 하는 욕심으로 드리는 말입니다.

 

여리님이 2005-05-30 19:40에 작성한 댓글입니다. Edit

알고 싶어하는 것을 명확히 제시하지 못하면, 좋은 조언을 구할 수 없습니다.. 아마도.. ^^;;

원하는 것을 상상해 가면서 샘플을 만들었습니다..

 

그럼..

 

필요하면 batch 부분을 procedure 형태로 가져가도 될 것 같습니다만, 역시 테이블 구조가 맘에 들지는 않네여.. ^^;;

 

<이하 샘플>

create table variety(
  bad_code varchar(100)
)

 

insert into variety values ('123498765678')

 

create table ref(
  code varchar(4) not null
, item varchar(4) not null
)

 

alter table ref
  add constraint pk_ref primary key (code, item)

 

insert into ref values ('1234', '0987')
insert into ref values ('1234', '0988')
insert into ref values ('1234', '0989')
insert into ref values ('9876', '0986')
insert into ref values ('9876', '0988')
insert into ref values ('9876', '0989')
insert into ref values ('5678', '0985')
insert into ref values ('5678', '0988')
insert into ref values ('5678', '0989')

 

select * from variety
select * from ref


---------------------------
-- batch start point
---------------------------

declare @table table (code varchar(4))
declare @bad_code varchar(100)
declare @idx int

select @bad_code = bad_code from variety
while len(@bad_code) > 0
  begin
    insert into @table values (substring(@bad_code, 1, 4))
    set @bad_code = substring(@bad_code, 5, len(@bad_code) - 4)
  end

 

-- 원하는 code list
select code from @table

 

-- 원하는 item list
select distinct item
  from @table t inner join ref on t.code = ref.code
  order by item

 

---------------------------
-- batch end point
---------------------------

 

drop table variety
drop table ref

길가는 나그네..님이 2005-05-30 22:16에 작성한 댓글입니다.
이 댓글은 2005-05-30 22:18에 마지막으로 수정되었습니다. Edit

리플 너무나감사합니다.미천한 실력거의 0 에 가까운 문법실력으로, 가장기초적인 실력으로 다른 디비를 보면서제가 원하는데로 하려니 정말힘드네요

ㅜㅜ 제가 정확하게 올리지 못한거 같네요 제 머리속에는 정말 해결할 방법이 많은데 막상 코딩을 하다보면 참허무하게 안되네요 ㅜㅜ

방법적인 차원으로라도 알려주시면 감사하겠습니다. 예를 들면 프로시저로 임시테이블을 만드는법이 젤로 시운건지 아니면 노가다로해서 하는게 좋은지 아흐 멀로 비교해야하나 당구에는 없는길이 없듯이 결과만 나오면되는것이 아닌 최고의 길을 한번에 선택하려니그런것같기도하고 머리속이텅 비었습니다. 음음 리플달아주신 두분 너무 감사합니다.

초보자님이 2005-05-30 23:34에 작성한 댓글입니다. Edit

나그네님 코드가 좋네요

 

테이블 변수에 코드를 4자리수가 없을때 까지 잘라 넣고

1234 2345 3456 이 다붙어서 죽 있으면,

다음과 같은 임시테이블에 넣고 엘리아스 T 하고

1234

2345

3456

이너 조인으로 원하는 목적테이블 ref 테이블과 조인에서

distict 로 뽑아오는 거네요

아주 훌륭하고 잘 이해 한거 같은데 저두 좀 보니 저렇게

생각이 들던데

 

초보자님 혹시라도 테이블변수나 이런것을 사용할 줄 모르셨다 거나

자신의 디비 서버에서 동작하지 않는다면, sql help 나 서버 버즌을 확인해 보세요 select @@version ^^;

 

테이블 변수로 안되면 7.0 에서는 임시테이블로 하면 됩니다. 좀 느리고디스크를 직접 쓴다는 안타까운 점이 있지만 동일한 효과 입니다.

석이님이 2005-05-31 01:42에 작성한 댓글입니다. Edit

나그네님의 답변이 맞는가 본데요 ^^

이상의 질문이 없는 걸보니 아니면 석이님이 직접 풀어주고 있는건지도 모르겠구요?

 

같이 하려는 모습들이 정말 좋네요.

저도 또한 동참하겠습니다.

 

근데 이미 석이님이 나섰으니 저는 여기다 올리면

그때 또 제 나름의 방법을 제시하겠습니다. ^^

 

 

여리님이 2005-05-31 09:17에 작성한 댓글입니다. Edit

원하는 질문에 정확히 답변이 되었는지 모르겠네요..

아직은 실력이 멀었지만, 석이님과 여리님께 칭찬들으니 기분 좋네여~

감사~~~ ^^*

 

초보자님이 제시한 문제의 설명상태로는 어느 방법이 최선이다라고 말씀드리기는 좀 힘들어보입니다..

석이님께서 도와드린다니, 석이님께 연락을 취해보세여~

가능하면 현재 테이블구조와 건수, index등 기본정보를 알려드리면서 정확히 그리고 자세히 질문을 하시는게 좋을 것 같네요..

 

그럼..

길가는 나그네..님이 2005-05-31 11:14에 작성한 댓글입니다.
이 댓글은 2005-05-31 11:14에 마지막으로 수정되었습니다. Edit

너무나 감사합니다. 오늘도 역시 해보았지만 빙글빙글 돌기만 합니다.

석이님내용은 이해가가는데요 ㅋㅋㅋ 뭐랄가 알수없는 내공의 부실함으로 실패 ㅜㅜ ^^ 지금 바로 석이님에게 매일보보려고요

너무나감사합니다. ㅋㅋ 아 관심받으니 좋네요 ㅎㅎ 귀여워해주세요^^결론나면 연락드릴게요 감사합니다.

초보자님이 2005-05-31 11:29에 작성한 댓글입니다. Edit

질문과는 조금 다른 글인데 괜찮으실까 모르겠네요.

혹여 글을 쓰신 초보자님께 누가된다면 용서하시고

길가는 나그네님의 글을 보다 많이 배워야 한다는 생각을 하게되고

다시 마음을 다잡아 공부하게 되네요.

길가는 나그네님 혹시 메신져를 사용하시나요?

제가 부족하거나 의문이 나는 점을 길가는 나그네님께

바로 질문코저 하려는 저의가 있지만..

여튼 사용하고 있다면 저를 추가해줄 수 있나요?

 

안된다는 답글에 저의 이메일을 지웠습니다.

 

여리님이 2005-05-31 13:12에 작성한 댓글입니다.
이 댓글은 2005-06-01 08:54에 마지막으로 수정되었습니다. Edit

여리님의 제의는 감사합니다만, 그럴 수 없어서 정말 죄송합니다..

어떻게 답변을 드려야할 지 모르겠네요..

저도 같이 얘기를 나눠가면서 배워나가고 싶지만, 메신저를 사용할 수 있는 회사환경(눈치보여서.. -_-;;)도 아니고 해서요..

가능하다면 이곳 게시판을 통해서 최대한 참여토록 하겠습니다..

 

참고로, 제가 있는 회사랑 SQL이랑 잘 안 어울리지만 어쨌던 최근에 SQL에 많은 관심을 가지고 공부하고 있습니다..

여러 좋은 게시판에서 많은 도움을 받고 있기 때문에 저 또한 이곳을 통해 도움을 드리고자 합니다..

잘못된 지식으로 엉뚱한 소리를 하기도 합니다만.. 귀엽게 봐주세영~  ^^;;

 

그럼, 다들 좋은 하루 되시길~

길가는 나그네..님이 2005-05-31 16:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1997PostgreSQL -> MSSQL2000으로 이동 포팅 (마이그레이션) [1]
김도일
2005-06-01
2112
1996도와주세요 테이블 INSERT 시 다른 테이블에 내용을 넣어야 하는데... [3]
김도연
2005-06-01
3617
1995데이타 값을 변경하려고 합니다. [2]
홍광표
2005-05-31
1652
1994겹치는 데이터 삭제...제목이 딱없네요.한번만 봐주세요 [9]
초보자
2005-05-30
3261
1993synonym 생성하기 [4]
조용주
2005-05-30
2578
1992없는 월을 레코드로 받으려고 할때 [3]
감사
2005-05-30
1558
1991튜닝 위한 select 에 대한 내부 구현 ? [1]
지피엘
2005-05-30
2122
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다