Как удалить все повторяющиеся записи из таблицы SQL? - PullRequest
6 голосов
/ 15 июня 2011

Здравствуйте, у меня есть имя таблицы FriendsData , которая содержит дубликаты записей, как показано ниже

fID UserID  FriendsID       IsSpecial      CreatedBy
-----------------------------------------------------------------
1   10         11            FALSE            1
2   11          5            FALSE            1
3   10         11            FALSE            1
4    5         25            FALSE            1 
5   10         11            FALSE            1
6   12         11            FALSE            1
7   11          5            FALSE            1
8   10         11            FALSE            1
9   12         11            FALSE            1

Я хочу удалить строки дублирующихся комбинаций с помощью MS SQL?
Удалить последние дубликаты записей изMS SQL FriendsData таблица.здесь я приложил изображение, которое выделяет дублирующиеся комбинации столбцов.

enter image description here

Как удалить все дублирующиеся комбинации из таблицы SQL?

Ответы [ 4 ]

12 голосов
/ 15 июня 2011

Попробуйте это

DELETE
FROM FriendsData 
WHERE fID NOT IN
(
SELECT MIN(fID)
FROM FriendsData 
GROUP BY UserID, FriendsID)

См. здесь

Или здесь - это больше способов сделать то, что вы хотите

Надеюсь, это поможет

3 голосов
/ 15 июня 2011

Кажется нелогичным, но вы можете удалить из общего табличного выражения (при определенных обстоятельствах). Итак, я бы сделал это так:

with cte as (
  select *, 
     row_number() over (partition by userid, friendsid order by fid) as [rn]
  from FriendsData
)
delete cte where [rn] <> 1

Это сохранит запись с самым низким значением индекса. Если вы хотите что-то еще, измените порядок по предложению в предложении over.

Если это вариант, наложите ограничение на уникальность таблицы, чтобы вам не приходилось это делать. Это не поможет спасти лодку, если у вас все еще есть утечка!

1 голос
/ 15 июня 2011

Я не знаю, правильный ли синтаксис для MS-SQL, но в MySQL запрос будет выглядеть так:

DELETE FROM FriendsData WHERE fID 
       NOT IN ( SELECT fID FROM FriendsData 
                   GROUP BY UserID, FriendsUserID, IsSpecial, CreatedBy)

В предложении GROUP BY вы ставите столбцы, которые должны быть идентичными, чтобы считать две записи дублирующимися

0 голосов
/ 15 июня 2011

Попробуйте этот запрос,

  select * from FriendsData f1, FriendsData f2
  Where f1.fID=f2.fID and f1.UserID  =f2.UserID  and f1.FriendsID  =f2.FriendsID

Если он вернет вам дублирующиеся строки, замените Select * на "Delete"

, который решит вашу проблему

...