Si l'ajout d'une clé primaire n'est pas envisageable, une approche consiste à stocker les doublons DISTINCT dans une table temporaire, à supprimer tous les enregistrements en double de la table existante, puis à ajouter les enregistrements dans la table originale à partir de la table temporaire.
Par exemple (écrit pour SQL Server 2008, mais la technique est la même pour toute base de données) :
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
Je ne suis pas sûr que sqlite possède une fonction ROW_NUMBER()
mais si c'est le cas, vous pouvez aussi essayer certaines des approches listées ici : Supprimer les enregistrements en double d'une table SQL sans clé primaire
0 votes
Veuillez placer les réponses dans les blocs de réponses. Plus tard, vous pourrez accepter votre propre réponse. Voir aussi Comment fonctionne l'acceptation d'une réponse ?