Double Possible:
SQL - Comment puis-je supprimer les doublons de lignes?J'ai une table avec un très grand nombre de lignes. Les doublons ne sont pas autorisés, mais en raison d'un problème avec la façon dont les lignes ont été créées, je sais qu'il y a des doublons dans ce tableau. J'ai besoin d'éliminer les lignes supplémentaires du point de vue des colonnes de clé. D'autres colonnes peuvent avoir légèrement différentes données, mais je ne m'inquiète pas à ce sujet. J'ai encore besoin de garder l'un de ces lignes. SELECT DISTINCT ne fonctionne pas parce qu'il fonctionne sur toutes les colonnes, et j'ai besoin de supprimer les doublons sur la base des colonnes.
Comment puis-je supprimer les lignes supplémentaires, mais toujours garder une manière efficace?
- Comment puis-je supprimer les lignes en double ? (5 réponses )
Réponses
Trop de publicités?Vous n'avez pas dit quelle version vous utilisez, mais dans SQL 2005 et au-dessus, vous pouvez utiliser une expression de table commune avec la Clause OVER. Il va quelque chose comme ceci:
WITH cte AS (
SELECT[foo], [bar],
row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
FROM TABLE
)
DELETE cte WHERE [rn] > 1
Jouer avec elle et voir ce que vous obtenez.
(Edit: Dans une tentative pour être utile, quelqu'un a édité le ORDER BY
clause dans les CTE. Pour être clair, vous pouvez commander par tout ce que vous voulez ici, il n'a pas besoin d'être l'une des colonnes retournées par le cte. En fait, une commune de cas d'utilisation, ici, est que "foo bar" sont l'identificateur de groupe et de "baz" est une sorte d'horodatage. Afin de conserver la plus récente, vous feriez ORDER BY baz desc
)