2011-05-04 3 views
3

Je veux simplement retourner les enregistrements en double d'une table. Dans mon cas, un enregistrement est en double si plus d'un enregistrement a la même valeur dans col1, col2, col3 et col4.Retour des enregistrements en double

Répondre

5
SELECT col1, col2, col3, col4 
    , COUNT(*) AS cnt 
FROM yourTable 
GROUP BY col1, col2, col3, col4 
HAVING COUNT(*) > 1 

Si des colonnes supplémentaires que vous souhaitez afficher, vous pouvez JOIN ci-dessus à la table:

SELECT t.* 
    , dup.cnt 
FROM yourTable t 
    JOIN 
     (SELECT col1, col2, col3, col4 
      , COUNT(*) AS cnt 
     FROM yourTable 
     GROUP BY col1, col2, col3, col4 
     HAVING COUNT(*) > 1 
    ) AS dup 
     ON t.col1 = dup.col1 
     AND t.col2 = dup.col2 
     AND t.col3 = dup.col3 
     AND t.col4 = dup.col4 
1
SELECT m.* 
FROM (
     SELECT col1, col2, col3, col4, COUNT(*) 
     FROM mytable 
     GROUP BY 
       col1, col2, col3, col4 
     HAVING COUNT(*) > 1 
     ) md 
JOIN mytable m 
ON  m.col1 = md.col1 
     AND m.col2 = md.col2 
     AND m.col3 = md.col3 
     AND m.col4 = md.col4 
+1

Est-ce pas juste retour toutes les lignes pour lesquelles 'col1, col2, col3, col4' sont tous 'NOT NULL'? –

+0

@Martin: bien sûr. – Quassnoi

Questions connexes