하나의 열을 기반으로 중복을 찾아야하는 많은 열이있는 테이블이 있습니다.다른 테이블에 잘못된 행을 전송하십시오.
e.e. 나는 다음 Customer_name
에 중복
- 을
customer_name
을 발견하면 나는 모든 소스 테이블에서 반복 제거해야합니다. - 모든 행을 동일한 구조의 다른 테이블로 보냅니다.
하나의 열을 기반으로 중복을 찾아야하는 많은 열이있는 테이블이 있습니다.다른 테이블에 잘못된 행을 전송하십시오.
e.e. 나는 다음 Customer_name
에 중복
customer_name
을 발견하면 나는 모든 소스 테이블에서 반복 제거해야합니다.: 마지막으로 첫 번째 테이블에서 삭제
delete from duplicatesTable
where --this is not the faulty row for each customerId
다음과 같은 두 개의 표가있는 경우 :
,210CREATE 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
를 들어
:
각 행에 고유 한 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)
이 시도
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
추가 RowID 열이 있으므로 SELECT * 때문에 삽입이 작동하지 않으므로 한 번 더 열을 삽입해야합니다. –
@ András 예, 저는 알고 있습니다.하지만 OP는 스키마를 제공하지 않았습니다. 사용하는 동안 그는 Select *를 제거 할 수 있으며 선택 쿼리에서 필요한 열을 가져올 수 있습니다. –
@phillyd 내가 중복 행을 삭제할 수 있어요하지만 다른 보낼 수 없습니다입니다 테이블 – Zerotoinfinity
하지만 두 번째 중복을 제거하는 중, 다른 테이블에 손상되었거나 오류가있는 모든 행이 필요합니다. 두 번째 중복이 아닌 모든 중복을 제거하려고합니다. – Zerotoinfinity
중복 행을 찾기 위해 무엇을 사용하고 있습니까? 코드를 보는 것이 도움이 될 것입니다. OUTPUT 절이 도움이 될 것 같습니다 : – phillyd