Удалить набор дубликатов записей и сохранить другой набор дубликатов записей - PullRequest
1 голос
/ 18 декабря 2009

Пожалуйста, смотрите данные, приведенные ниже альтернативный текст http://img709.imageshack.us/img709/1980/deleteduprecords.png

Я хочу сохранить один набор записей и хочу удалить другой дубликат набора записей. Вы можете видеть, что ForeignKey такие же, только Primary Key другой.

Необходимо сохранить 2 записи с самым низким первичным ключом среди набора из 4 записей.

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009
Delete from Table mytable t1
where exists (select 1 from mytable t2
where t2.PrimaryKey < t1.PrimaryKey
and t2.ForeignKey = t1.ForeignKey
and t2.AnotherForeignKey = t1.AnotherForeignKey)
1 голос
/ 18 декабря 2009

Используя функциональные возможности CTE из SQL Server 2005, вы можете удалять повторяющиеся записи следующим образом

(PS. Я не вижу дизайн, так что это подход.)

DECLARE @Table TABLE(
        ID INT,
        FK INT,
        VName VARCHAR(50)
)

INSERT INTO @Table (ID,FK,VName) SELECT 1, 1, 'A'
INSERT INTO @Table (ID,FK,VName) SELECT 2, 1, 'A'
INSERT INTO @Table (ID,FK,VName) SELECT 3, 1, 'A'
INSERT INTO @Table (ID,FK,VName) SELECT 4, 2, 'B'
INSERT INTO @Table (ID,FK,VName) SELECT 5, 2, 'B'
INSERT INTO @Table (ID,FK,VName) SELECT 6, 2, 'B'

;WITH CTE AS (
    SELECT *,
            ROW_NUMBER() OVER (PARTITION BY FK  ORDER BY ID) RowNumber
    FROM    @Table
)
DELETE FROM CTE WHERE RowNumber > 1

SELECT * FROM @Table
0 голосов
/ 18 декабря 2009

На самом деле я нахожусь в дилемме, что под SET вы подразумеваете сочетание всех последних двух полей или только внешнего ключа.

Если это только внешний ключ, примите решение Астендера.

Если это для последних двух полей, то

Пример ввода:

PK  FK  AFK
4669    121 1
4670    121 2
10675   121 1
10676   121 2
101 254 1
102 254 2
703 254 1
704 254 2

Запрос:

;with cte as(
select
ROW_NUMBER() over(partition by FK ,AFK order by GETDATE()) rn,
t.* from @t t)
delete from cte where rn = 1
select * from @T

Выход:

PK  FK  AFK
4669    121 1
10676   121 2
102 254 2
703 254 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...