Birincil anahtar eklemek bir seçenek değilse, bu durumda bir yaklaşım, yinelenen DISTINCT'i geçici bir tabloda depolamak, mevcut tablodan yinelenen tüm kayıtları silmek ve ardından kayıtları geçici tablodan orijinal tabloya geri eklemek olacaktır. .
Örneğin (SQL Server 2008 için yazılmıştır, ancak teknik herhangi bir veritabanı için aynıdır):
DECLARE @original AS TABLE([hash] varchar(20), [d] float)
INSERT INTO @original VALUES('A', 1)
INSERT INTO @original VALUES('A', 2)
INSERT INTO @original VALUES('A', 1)
INSERT INTO @original VALUES('B', 1)
INSERT INTO @original VALUES('C', 1)
INSERT INTO @original VALUES('C', 1)
DECLARE @temp AS TABLE([hash] varchar(20), [d] float)
INSERT INTO @temp
SELECT [hash], [d] FROM @original
GROUP BY [hash], [d]
HAVING COUNT(*) > 1
DELETE O
FROM @original O
JOIN @temp T ON T.[hash] = O.[hash] AND T.[d] = O.[d]
INSERT INTO @original
SELECT [hash], [d] FROM @temp
SELECT * FROM @original
Sqlite'ın bir ROW_NUMBER()
tür işlevi olup olmadığından emin değilim , ancak varsa, burada listelenen yaklaşımlardan bazılarını da deneyebilirsiniz: Birincil anahtar olmadan bir SQL tablosundan yinelenen kayıtları silin