2012-09-06 3 views
2

하나의 열을 기반으로 중복을 찾아야하는 많은 열이있는 테이블이 있습니다.다른 테이블에 잘못된 행을 전송하십시오.

e.e. 나는 다음 Customer_name에 중복

  1. customer_name을 발견하면 나는 모든 소스 테이블에서 반복 제거해야합니다.
  2. 모든 행을 동일한 구조의 다른 테이블로 보냅니다.
+0

@phillyd 내가 중복 행을 삭제할 수 있어요하지만 다른 보낼 수 없습니다입니다 테이블 – Zerotoinfinity

+0

하지만 두 번째 중복을 제거하는 중, 다른 테이블에 손상되었거나 오류가있는 모든 행이 필요합니다. 두 번째 중복이 아닌 모든 중복을 제거하려고합니다. – Zerotoinfinity

+0

중복 행을 찾기 위해 무엇을 사용하고 있습니까? 코드를 보는 것이 도움이 될 것입니다. OUTPUT 절이 도움이 될 것 같습니다 : – phillyd

답변

2

: 마지막으로 첫 번째 테이블에서 삭제

delete from duplicatesTable 
where --this is not the faulty row for each customerId 

다음과 같은 두 개의 표가있는 경우 :

,210
CREATE TABLE t1 (ID int, customerName varchar(64)) 
CREATE TABLE t2 (ID int, customerName varchar(64)) 

당신이 뭔가를 할 수 있습니다 : 여기

--First Copy 

WITH CTE_T1 
AS 
(
SELECT 
    ID, 
    customerName, 
    ROW_NUMBER() OVER(PARTITION BY customerName ORDER BY ID) as OrderOfCustomer 
    FROM 
    t1 
) 
INSERT INTO t2 
SELECT ID, customerName FROM cte_T1 
WHERE OrderOfCustomer > 1; 

--Then Delete 

WITH CTE_T1 
AS 
(
SELECT 
    ID, 
    customerName, 
    ROW_NUMBER() OVER(PARTITION BY customerName ORDER BY ID) as OrderOfCustomer 
    FROM 
    t1 
) 
DELETE FROM CTE_T1 
WHERE OrderOfCustomer > 1 

SQLFiddle입니다 (ID 열에는 당신이 필요로하는, 당신이 그것을 변경할 수 있습니다 단지 유지하기 위해 무엇을 deceision을위한 기반을 가지고 할 수 있습니다) 어떻게 작동하는지 보여줍니다. deteting를 들어 이동 중복

INSERT Into DuplicatesTable 
SELECT * 
FROM 
(SELECT *, ROW_NUMBER() OVER(PARTITION BY Customer_name ORDER BY Customer_name) As RowID, 
FROM SourceTable) as temp 
WHERE RowID > 1 

를 들어

:

2

각 행에 고유 한 ID 기본 키가있는 것 같습니다.

이 당신의 중복 행 테이블에 삽입합니다

Insert into duplicateRowsTable 
select * from myTable t1 
where (select count(*) from myTable t2 where t1.customerId = t2.customerId) > 1 

당신은 좋은 행 duplicateRowsTable에서 삭제 :

delete from myTable 
where id IN (select id from duplicatesTable) 
2

이 시도

WITH TableCTE 
AS 
(
SELECT *, 
ROW_NUMBER() OVER(PARTITION BY Customer_name ORDER BY Customer_name) AS RowID 
FROM SourceTable 
) 
DELETE 
FROM TableCTE 
WHERE RowID> 1 
+0

추가 RowID 열이 있으므로 SELECT * 때문에 삽입이 작동하지 않으므로 한 번 더 열을 삽입해야합니다. –

+0

@ András 예, 저는 알고 있습니다.하지만 OP는 스키마를 제공하지 않았습니다. 사용하는 동안 그는 Select *를 제거 할 수 있으며 선택 쿼리에서 필요한 열을 가져올 수 있습니다. –

관련 문제