Q&A

  • 한테이블안에 중복데이타가 있는데.....
MS_SQL 에서 DISTINCT 로 하면...중복데이타중 하나만 가져오는거 말구여..



전 한테이블 안에 여러개의 중복데이타가 들어가 버렸습니다.



그러니깐...같은 내용의 데이타가 거의 2줄씩 들어가 있습니다.....



제생각에는



select a.*

from table1 a, table2 b

where a.field1 = b.field1

and a.field2 = b.field2

and a.field3 = b.field3

and a.field4 = b.field4



대충 뭐 이렇게 하면 2줄 이상이 아닌것들도 나오자나여..





음...제가 말해놓고도 설명이 잘 안돼는듯..^^;;

간략히 줄이자면..

같은 테이블에 똑같은 내용의 데이타가 여러줄 들어가있습니다.

그래서 중복되는 데이타들은 단한개의 데이타만 남기고 모두 삭제하려 합니다.

도와주세요..



답변 미리 감사드리겠습니다.^^

2  COMMENTS
  • Profile
    제덕모 2001.02.14 23:41
    똑같은 테이블 구조를 가지는 임시테이블을 만들어

    GROUP BY 를 통한 중복값들을 하나씩만 걸러내어

    새로만든 곳으로 INSERT하고

    기존 테이블에 있는 데이터는 한꺼번에 날려버리고

    임시테이블에 있는 값을 적용하시는게 제일 낳을거 같네요..





    1) 아래의 방법은 프로시져를 만들어 하는 방법입니다.

    쿼리 분석기에서 "EXEC ERASE_ROW"라고만 실행 하시면 되겠져?



    CREATE PROCEDURE ERASE_ROW

    AS



    -- 임시 테이블을 만듭니다. #는 임시테이블이라는 명시입니다.



    CREATE TABLE #TEMP

    (

    FIELD1 CHAR(??),

    FIELD2 CHAR(??),

    FIELD3 CHAR(??),

    FIELD4 CHAR(??)

    )





    -- GROUP BY 해서 중복값들을 하나씩만 임시테이블에 집어 넣습니다.



    INSERT INTO #TEMP

    SELECT FIELD1, FIELD2, FIELD3, FIELD4

    FROM TABLE1

    GROUP BY FIELD1, FIELD2, FIELD3, FIELD4



    -- 기존 테이블의 값을 삭제합니다.



    DELETE TABLE1



    -- 임시테이블에 있는값을 원래대로 집어 넣습니다.

    INSERT INTO TABLE1

    SELECT * FROM #TEMP



    -- 끝



    2) 다음은 쿼리분석기에서 실행방법입니다.

    별반 다를게 없습니다.

    CREATE라는 부분만 없습니다. ^^;

    주의사항 : 단계실행중에 쿼리분석기를 종료하시면 안됩니다.

    임시테이블이 사라집니다.



    CREATE TABLE #TEMP

    (

    FIELD1 CHAR(??),

    FIELD2 CHAR(??),

    FIELD3 CHAR(??),

    FIELD4 CHAR(??)

    )



    -- GROUP BY 해서 중복값들을 하나씩만 임시테이블에 집어 넣습니다.



    INSERT INTO #TEMP

    SELECT FIELD1, FIELD2, FIELD3, FIELD4

    FROM TABLE1

    GROUP BY FIELD1, FIELD2, FIELD3, FIELD4



    -- 기존 테이블의 값을 삭제합니다.



    DELETE TABLE1



    -- 임시테이블에 있는값을 원래대로 넣습니다.



    INSERT INTO TABLE1

    SELECT * FROM #TEMP



    -- DROP #TABLE은 안쓰셔도 상관없습니다.

    -- 쿼리분석기가 종료되면 임시테이블도 자동 DROP됩니다.



    DROP #TABLE



    -- 끝



    그럼 도움이 되셨길 간절히 바라면서.. ^___________^;;

    20000....



    델파이걸 wrote:

    > MS_SQL 에서 DISTINCT 로 하면...중복데이타중 하나만 가져오는거 말구여..

    >

    > 전 한테이블 안에 여러개의 중복데이타가 들어가 버렸습니다.

    >

    > 그러니깐...같은 내용의 데이타가 거의 2줄씩 들어가 있습니다.....

    >

    > 제생각에는

    >

    > select a.*

    > from table1 a, table2 b

    > where a.field1 = b.field1

    > and a.field2 = b.field2

    > and a.field3 = b.field3

    > and a.field4 = b.field4

    >

    > 대충 뭐 이렇게 하면 2줄 이상이 아닌것들도 나오자나여..

    >

    >

    > 음...제가 말해놓고도 설명이 잘 안돼는듯..^^;;

    > 간략히 줄이자면..

    > 같은 테이블에 똑같은 내용의 데이타가 여러줄 들어가있습니다.

    > 그래서 중복되는 데이타들은 단한개의 데이타만 남기고 모두 삭제하려 합니다.

    > 도와주세요..

    >

    > 답변 미리 감사드리겠습니다.^^

  • Profile
    델파이걸 2001.02.15 00:47
    제덕모 wrote:

    > 똑같은 테이블 구조를 가지는 임시테이블을 만들어

    > GROUP BY 를 통한 중복값들을 하나씩만 걸러내어

    > 새로만든 곳으로 INSERT하고

    > 기존 테이블에 있는 데이터는 한꺼번에 날려버리고

    > 임시테이블에 있는 값을 적용하시는게 제일 낳을거 같네요..

    >

    >

    > 1) 아래의 방법은 프로시져를 만들어 하는 방법입니다.

    > 쿼리 분석기에서 "EXEC ERASE_ROW"라고만 실행 하시면 되겠져?

    >

    > CREATE PROCEDURE ERASE_ROW

    > AS

    >

    > -- 임시 테이블을 만듭니다. #는 임시테이블이라는 명시입니다.

    >

    > CREATE TABLE #TEMP

    > (

    > FIELD1 CHAR(??),

    > FIELD2 CHAR(??),

    > FIELD3 CHAR(??),

    > FIELD4 CHAR(??)

    > )

    >

    >

    > -- GROUP BY 해서 중복값들을 하나씩만 임시테이블에 집어 넣습니다.

    >

    > INSERT INTO #TEMP

    > SELECT FIELD1, FIELD2, FIELD3, FIELD4

    > FROM TABLE1

    > GROUP BY FIELD1, FIELD2, FIELD3, FIELD4

    >

    > -- 기존 테이블의 값을 삭제합니다.

    >

    > DELETE TABLE1

    >

    > -- 임시테이블에 있는값을 원래대로 집어 넣습니다.

    > INSERT INTO TABLE1

    > SELECT * FROM #TEMP

    >

    > -- 끝

    >

    > 2) 다음은 쿼리분석기에서 실행방법입니다.

    > 별반 다를게 없습니다.

    > CREATE라는 부분만 없습니다. ^^;

    > 주의사항 : 단계실행중에 쿼리분석기를 종료하시면 안됩니다.

    > 임시테이블이 사라집니다.

    >

    > CREATE TABLE #TEMP

    > (

    > FIELD1 CHAR(??),

    > FIELD2 CHAR(??),

    > FIELD3 CHAR(??),

    > FIELD4 CHAR(??)

    > )

    >

    > -- GROUP BY 해서 중복값들을 하나씩만 임시테이블에 집어 넣습니다.

    >

    > INSERT INTO #TEMP

    > SELECT FIELD1, FIELD2, FIELD3, FIELD4

    > FROM TABLE1

    > GROUP BY FIELD1, FIELD2, FIELD3, FIELD4

    >

    > -- 기존 테이블의 값을 삭제합니다.

    >

    > DELETE TABLE1

    >

    > -- 임시테이블에 있는값을 원래대로 넣습니다.

    >

    > INSERT INTO TABLE1

    > SELECT * FROM #TEMP

    >

    > -- DROP #TABLE은 안쓰셔도 상관없습니다.

    > -- 쿼리분석기가 종료되면 임시테이블도 자동 DROP됩니다.

    >

    > DROP #TABLE

    >

    > -- 끝

    >

    > 그럼 도움이 되셨길 간절히 바라면서.. ^___________^;;

    > 20000....

    >

    > 델파이걸 wrote:

    > > MS_SQL 에서 DISTINCT 로 하면...중복데이타중 하나만 가져오는거 말구여..

    > >

    > > 전 한테이블 안에 여러개의 중복데이타가 들어가 버렸습니다.

    > >

    > > 그러니깐...같은 내용의 데이타가 거의 2줄씩 들어가 있습니다.....

    > >

    > > 제생각에는

    > >

    > > select a.*

    > > from table1 a, table2 b

    > > where a.field1 = b.field1

    > > and a.field2 = b.field2

    > > and a.field3 = b.field3

    > > and a.field4 = b.field4

    > >

    > > 대충 뭐 이렇게 하면 2줄 이상이 아닌것들도 나오자나여..

    > >

    > >

    > > 음...제가 말해놓고도 설명이 잘 안돼는듯..^^;;

    > > 간략히 줄이자면..

    > > 같은 테이블에 똑같은 내용의 데이타가 여러줄 들어가있습니다.

    > > 그래서 중복되는 데이타들은 단한개의 데이타만 남기고 모두 삭제하려 합니다.

    > > 도와주세요..

    > >

    > > 답변 미리 감사드리겠습니다.^^

    • 김창현
    • 2001.02.15 01:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2001.02.15 07:41
      김창현 wrote: > procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; > Shif...
    • 광란자
      2001.02.15 01:45
      그냥 ListBox1.Item..... 이렇게 쓰시든지 아니면 (Sender as TlistBox).Item.... 이렇게 쓰시면 됩니...
    • 광란자
      2001.02.15 01:48
      Standard Component 에 그러니까 판넬콤포넌트의 옆에 옆에 옆에 ScrollBar 콤포넌트가 보이는 군여.......
    • 써니
    • 2001.02.15 01:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
      2001.02.15 01:28
      써니 wrote: > insert into 를 하는데 제데로 값들이 다 들어가 있는데.. > execsql문에서 > > field...
    • 누리
    • 2001.02.15 00:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 초보자
      2001.02.15 01:59
      누리 wrote: > 먼저 답변감사합니다 > 그런데 전 왕초보랍니다. > 좀 어렵네요 > > 테이블우편번호...
    • 바람개비
      2001.02.15 01:58
      길이가 고정되어 있다면 그냥 간단(무식?)하게 s:=tstable.fieldbyname('zip').asstring; t:=copy(s,1,3)...
    • 강인규
    • 2001.02.15 00:48
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 바람개비
      2001.02.15 02:01
    • kylix
      2001.02.15 03:44
    • 바람개비
      2001.02.15 08:19
    • kylix
      2001.02.15 10:43
    • 바람개비
      2001.02.15 23:41
    • kylix
      2001.02.16 03:12
    • 광란자
      2001.02.15 02:11
      델 초보 wrote: > 회원관리를 만들려구 하는데... > 회원 로그온을 어떻게 해야 하나여..... > 방법좀 ...
    • 이승근
    • 2001.02.14 23:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 광란자
      2001.02.15 02:17
      백문이 불여일행 이란 말이 있져~~!! 한 번 직접 바꿔가며 찍어 보세여...쩝
    • kylix
      2001.02.15 04:38
      둘다 강제로 형변환을 하는것인데 as연산자는 같은형이거나 자손형이 아니면 예외를 일으킵니다. 직접적으...
    • tk
    • 2001.02.14 23:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 서록
      2001.02.14 23:38
      http://www.borland.com/techpubs/interbase/ 에 가시면 문서를 보실 수 있습니다. 즐거운 코딩 되시길...
    • 제덕모
      2001.02.14 23:55
      Query1의 프로퍼티중에 RequestLive라는 부분이 있습니다. True로 되어있나 확인해보세요. TUpdateSQL...
    • 크리스탈
      2001.02.15 00:06
      감사합니다. 하지만 그렇게하니까... 'capability not supported'라는 메시지가 뜨는군요. 다시한번 답...
    • deukmo
      2001.02.15 02:22
      지금하고 있는 프로젝트를 저한테 보내보세요. 크리스탈 wrote: > 감사합니다. > 하지만 그렇게하...
    • 크리스탈
      2001.02.16 00:09
      deukmo wrote: > 지금하고 있는 프로젝트를 저한테 보내보세요. > > > > 크리스탈 wrote: > > 감...
    • 배움이
    • 2001.02.14 22:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신태균
      2001.05.15 22:15
      아마 ocx 문제일겁니다. 소스내에 mscomm32.ocx를 사용하는 프로그램을 로딩시킬때 에러가 생기는 거로 사...
    • 박선희
    • 2001.02.14 22:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 윤재용
      2001.02.28 02:23
      박선희 wrote: > DBGrid 컬럼의 PickList에 내용을 추가하였습니다. > > List내용중 하나를 선택하면 U...
    • 이승근
    • 2001.02.14 22:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 뿌요
      2001.02.14 23:38
      데이타가 같을때 안 나타낼려면 코딩으로 처리하는 수밖에 없어요.. procedure TForm1.ReporeBeforePrin...
    • 제덕모
      2001.02.14 23:41
      똑같은 테이블 구조를 가지는 임시테이블을 만들어 GROUP BY 를 통한 중복값들을 하나씩만 걸러내어 새...
    • 델파이걸
      2001.02.15 00:47
      제덕모 wrote: > 똑같은 테이블 구조를 가지는 임시테이블을 만들어 > GROUP BY 를 통한 중복값들을 하나...
    • 김지엽
      2001.02.14 23:34
      델파이는 Objective Pascal문법을 사용하고 있으며, Objective Pascal은 기본적으로 Pascal의 문법을 사용...