2010-01-06 10 views
1

Considérons que j'ai une table nommée A. Dans ce que je n'ai qu'une seule colonne nommée marques. Il a des valeurs dupliquées. Comment puis-je supprimer les valeurs en double sans table temporaire. Et la table doit contenir l'une des valeurs dupliquées.Supprimer des enregistrements en double dans une table

+0

suppression quetions double dans stackoverflow: http://www.google.com/search?q=duplicate+records+site:stackoverflow.com –

+0

http://stackoverflow.com/questions/1585412/sql- to-delete-duplicate-records-in-a-table –

+0

Susan, si vous cliquez sur le lien fourni par Vinko, vous pourrez peut-être trouver la réponse à votre question à partir de ces questions SO précédentes similaires. – DOK

Répondre

0

Si deux enregistrements sont égaux dans le tableau, je ne sais pas comment vous pourriez en identifier un pour supprimer uniquement cet élément. Ce que vous pouvez faire est:

  • supprimez les deux, puis ajoutez-en un en utilisant probablement un curseur ou une structure en boucle.
  • sélectionnez dans une autre table et groupe pour que vous n'obteniez pas de doublons, puis supprimez toutes les lignes de l'original et copiez-les.
  • ajouter une colonne id à cette table, peupler appeler alors:

    SUPPRIMER D'UN OU ( id NOT IN (SELECT MAX (id) d'un nom GROUPE PAR) )

et vous pouvez supprimer cette colonne après

+0

salut juste voir la question qu'il a seulement une colonne dans le tableau – susanthosh

+0

Je comprends cela. Mes suggestions se rapportent aux enregistrements (lignes) dans une table et non aux colonnes. – bobwah

1

SELECT * D'UN INNER JOIN A comme B O WH A.marks = B.marks;

Cela montre les valeurs dupliquées (si je ne fais pas d'erreurs), alors peut-être que vous pouvez faire un JOIN pour un DELETE?

EDIT: J'essaie juste ça, ça ne marche pas, tu n'as pas de colonne ID dans ta table? aime:

SELECT * 
FROM A INNER JOIN A as B ON A.marks = B.marks 
WHERE A.id != B.id; 
0

La raison pour laquelle il est si difficile de supprimer les doublons susantosh est parce que vous n'avez pas défini une clé de votre table pour ce qui fait l'une de vos lignes uniques? Vous aurez besoin de prendre un livre de base sur la conception de la table et réaliser que sans une sorte d'unicité, vous allez vous rendre fou en essayant de comprendre quoi que ce soit.

Il y a quelques choses que vous pouvez faire:

  1. SELECT DISTINCT marks FROM TableName INTO NewTableName
  2. GROUP
  3. par une des marques spécifiques les déplacer vers une autre table, puis supprimer la table précédente
  4. Ajouter une colonne UNIQUE Identity (peut-être de int type) puis écrire le code pour se débarrasser des doublons

Ce sont juste quelques-unes de vos options, mais sans comprendre les bases de la conception de la table, vous courrez dans t son problème encore et encore.

+0

La chose principale est que nous ne devrions pas utiliser de tables temporaires. – susanthosh

0
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY marks ORDER BY marks) AS rn 
     FROM a 
     ) 
DELETE 
FROM q 
WHERE rn > 1 
Questions connexes