2017-04-11 4 views
-3

두 테이블을 가지고 있는데, 하나는 temptable이고 다른 하나는 Persons입니다. 아래에서 중복 된 데이터를 temptable에서 삭제해야합니다.임시 테이블에서 중복 행 제거를위한 쿼리

표 하나

CREATE TABLE temptable 
    (ID int, 
    Name varchar(255), 
    pan varchar(255), 
    Address varchar(255), 
    status varchar(255)); 

표 2 : temptable

CREATE TABLE Persons ( 
     ID int, 
     Name varchar(255), 
     pan varchar(255), 
      Address varchar(255), 
     status varchar(255)); 

데이터 중복을 가지고

----------------------------------------------------------- 
ID Name   pan   Address  status 
----------------------------------------------------------- 
1 Gopal  akkoso232l  hyd   ACCESSED 
1 Gopal  akkoso232l  hyd   ACCESSED 
2 sAI   aaa1213   VIZ   PENDING 
3 RAM   LLWELW1213  hyd   ACCESSED 
4 ONE   ONE12so232l  CHN   ACCESSED 
5 REDDY  aZZoWE232l  TOW   ACCESSED 
---------------------------------------------------------- 

6 sUNRAI  akppg8732  hyd   ACCESSED 
6 sUNRAI  akppg8732  hyd   PENDING 

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

I는 (중복 없음) 아래와 같은 주요 테이블 데이터가 필요

명 :

------------------------------------------------ 
ID Name  pan   Address status 
------------------------------------------------ 
1 Gopal akkoso232l  hyd  ACCESSED 
2 sAI  aaa1213   VIZ  PENDING 
3 RAM  LLWELW1213  hyd  ACCESSED 
4 ONE  ONE12so232l  CHN  ACCESSED 
5 REDDY aZZoWE232l  TOW  ACCESSED 
------------------------------------------------ 
6 SUNRAI akppg8732  hyd  ACCESSED 
------------------------------------------------ 
+0

MySQL 또는 Oracle을 사용하고 있습니까? 이 문제에 대한 해결책을 찾으려고 노력 했습니까? –

+0

오라클 : http://stackoverflow.com/questions/529098/removing-duplicate-rows-from-table-in-oracle ... MySQL : http://stackoverflow.com/questions/2630440/how-to-delete -duplicates-on-a-mysql-table –

+0

''유인물 '에 특정'Name'을위한 2 개의 행,'ACCESSED' 상태와'PENDING' 상태를 갖는 행이 있다면,'ACCESSED' 행이 'Persons' 테이블? – Nitish

답변

0

본인의 메인 테이블이 사람이라고 가정합니다.

당신은 유혹 테이블에서 중복 값을 제거하고 사람에게 삽입하는 쿼리를 원합니다. 데이터에서이 ID는 팬을 구별하고자하는 경우

insert into persons 
    select distinct(id),name,pan,address,status 
    from temptable; 

을해야 테이블 쿼리를 식별하는 키 필드 인 경우 테이블의 TEMPTABLE에서 해당 ID 필드가 1의 중복 값을 가지며으로 고유하지 않습니다 발견 뚜렷한 특징으로 냄비와 함께 뚜렷한 기능을 사용하십시오. 당신이 순서를 사용하는 경우

insert into Persons (ID, Name, pan, Address,status) 
select distinct ID, Name, pan, Address,status 
from temptable 
/
+0

도움 주셔서 감사합니다. 위의 시나리오 (별개)는 해결하지만 여전히 질문이 하나 더 있습니다. 그러나 동일한 팬에는 'ACCESSED'와 PENDING 같은 다른 상태가 포함되어 있습니다.이 시나리오에서는 'ACCESSED'팬 행 데이터 만 필요합니다. – user187621

0

오히려 임시 테이블에서 중복 행을 삭제하는 것보다 쉬운 솔루션은 기본 테이블을 채울 때를 필터링하는 것입니다 다음으로 ACCESSED이 먼저 표시되고 PENDING이 표시됩니다. 따라서 row_number는 그룹의 첫 번째 레코드에 seq = 1을 부여합니다.

그런 다음 삽입하기 전에이 seq = 1을 사용하여 행을 필터링하십시오.

참고 : 데이터에 ACCESSEDPENDING 이외의 상태가 더 많은 경우이 쿼리가 작동하지 않을 수 있습니다.

+0

'SUNRAI'라는 이름에는 유혹에 2 가지 상태가 있습니다. 그러나'Persons' 테이블에는 한 행만 있습니다. – Nitish

+0

@Nitesh - 좋은 지적. – APC

+0

도와 주셔서 감사합니다. 위의 시나리오 (별개)는 동일한 데이터를 해결하지만 여전히 하나의 질문이 있습니다.이 시나리오에서 'ACCESSED'와 PENDING 같은 다른 상태가 포함되어 있습니다 'ACCESSED'팬 행 데이터 만 필요합니다 – user187621

1

insert into persons (ID, Name, pan, Address,status) 
select ID, Name, pan, Address,status 
from 
(
select t.* 
,row_number over (partition bu id,name,pan,address order by status) as seq 
from temptable 
) 
where seq=1 

을 시도해보십시오

+0

다음 첫 번째 삽입하여 중복 제거 – Utsav

관련 문제