J'utilise SQL Server 2005.
J'ai une table comme celle-ci - p> Dans ce cas, je veux supprimer toutes les entrées en double et conserver une seule instance AS - P> ID Name
1 a
2 b
3 c
4 d
5 Réponses :
delete from table1 USING table1, table1 as vtable WHERE (NOT table1.ID=vtable.ID) AND (table1.Name=vtable.Name)
Êtes-vous sûr que vous utilisez est disponible dans SQL Server? Je reçois une erreur de syntaxe près de l'utilisation.
Désolé, je l'ai testé pour MySQL, je pensais que cela fonctionne aussi sur SQL. Quelle erreur obtenez-vous?
Pas de problème, j'ai une syntaxe incorrecte près de l'utilisation. Je ne pense pas qu'il n'y ait aucun travail clé dans SQL. Il sera converti à partir de.
DELETE FROM tbl
WHERE ID NOT IN (
SELECT MIN(ID)
FROM tbl
GROUP BY Name
)
Juste pour mentionner, je ne t'ai pas répondu. Mais les identifiants sont également identiques pour des lignes en double. Pourtant,
Cela supprimera tous les enregistrements avec une pièce d'identité <> 1, et non de l'OP ayant besoin. (pas mon bowvote BTW).
Utilisation d'un Row_Number dans un CTE vous permet de supprimer des valeurs dupliquées tout en conservant des lignes uniques.
WITH q AS (
SELECT RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID )
, ID
, Name
FROM ATable
)
DELETE FROM q WHERE RN > 1
lieven a raison ... Cependant, vous voudrez peut-être modifier le code de Lieven en ajoutant simplement une clause supérieure dans la déclaration de suppression comme celle-ci: p>
Supprimer le dessus (1) de q où rn> 1; p>
J'espère que cela aide p>
Vous pouvez utiliser cette requête:
delete a from (select id,name, ROW_NUMBER() over (partition by id,name order by id) row_Count from dup_table) a where a.row_Count >1
Pourquoi avez-vous approuver cette modification suggérée non valide ? S'il vous plaît prendre du temps pour l'examiner correctement.
@ HIMS056 - son édité maintenant de manière appropriée. Merci.