Удалить дубликаты записей с разными идентификаторами (автоматическое создание первичного ключа) - PullRequest
0 голосов
/ 11 июля 2019

У меня есть таблица, в которой в качестве первичного ключа используются идентификаторы с автоматическим приращением (случайное значение), но есть дубликаты записей при проверке данных из других столбцов, теперь необходимо удалить эти дубликаты записей.

Я пробовал использовать разные, MySQL 5 не имеет rownum, поэтому не пробовал с rownum.

В настоящее время данные похожи на

Id     Col1
1anx    A
css2    B
3xcs    B
cd4v    C
xcv5    D
czv6    D

Я хочу, чтобы данные были такими:

Id     Col1
1anx    A
css2    B
cd4v    C
xcv5    D

Ответы [ 2 ]

1 голос
/ 11 июля 2019

В качестве альтернативы ROW_NUMBER мы можем попытаться использовать соединение с подзапросом, который находит наименьшее Id для каждой буквы:

SELECT t1.Id, t1.Col1
FROM yourTable t1
INNER JOIN
(
    SELECT Col1, MIN(Id) As min_id
    FROM yourTable
    GROUP BY Col1
) t2
    ON t1.Col1 = t2.Col1 AND t1.Id = t2.min_id;
0 голосов
/ 11 июля 2019

Это может помочь

IF OBJECT_ID('tempdb..#TempData') IS NOT NULL
    DROP TABLE #TempData
GO
CREATE TABLE  #TempData 
(
Id VARCHAR(10),
Col1 VARCHAR(10)
)
GO
INSERT INTO #TempData(Id,Col1) VALUES
( '1anx',   'A' ),
( 'css2',   'B' ),
( '3xcs',   'B' ),
( 'cd4v',   'C' ),
( 'xcv5',   'D' ),
( 'czv6',   'D' )
GO
;WITH DuplicateData
AS(
SELECT *,DENSE_RANK() OVER(PARTITION BY Col1 ORDER BY Id ASC) [Rank]
FROM #TempData
)
DELETE d
FROM DuplicateData d WHERE Rank > 1
GO
SELECT * FROM #TempData
GO

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...