web-dev-qa-db-fra.com

Rechercher des entrées en double dans une colonne

J'écris cette requête pour trouver des enregistrements CTN en double dans table1. Donc, je pense que si le CTN_NO apparaît plus de deux fois ou plus, je veux qu'il soit affiché dans ma sortie de l'instruction SELECT * en haut.

J'ai essayé la logique de sous-requête suivante mais j'ai besoin de pulls

  SELECT *
         table1 
   WHERE S_IND='Y'
     and CTN_NO = (select CTN_NO 
                     from table1 
                    where S_IND='Y' 
                      and count(CTN_NO) < 2);
order by 2
40
anwarma

En utilisant:

  SELECT t.ctn_no
    FROM YOUR_TABLE t
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

... vous montrera le ctn_no valeur (s) contenant des doublons dans votre table. L'ajout de critères au WHERE vous permettra de régler davantage les doublons:

  SELECT t.ctn_no
    FROM YOUR_TABLE t
   WHERE t.s_ind = 'Y'
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

Si vous souhaitez voir les autres valeurs de colonne associées au doublon, vous devrez utiliser une jointure automatique:

SELECT x.*
  FROM YOUR_TABLE x
  JOIN (SELECT t.ctn_no
          FROM YOUR_TABLE t
      GROUP BY t.ctn_no
        HAVING COUNT(t.ctn_no) > 1) y ON y.ctn_no = x.ctn_no
100
OMG Ponies

Essayez cette requête. Elle utilise la fonction analytique SUM:

SELECT * FROM
(  
 SELECT SUM(1) OVER(PARTITION BY ctn_no) cnt, A.*
 FROM table1 a 
 WHERE s_ind ='Y'   
)
WHERE cnt > 2

Je ne sais pas pourquoi vous identifiez un enregistrement comme doublon si le ctn_no se répète plus de 2 fois. Pour moi, il se répète plus d'une fois, c'est un doublon. Dans ce cas, changez la partie las de la requête en WHERE cnt > 1

2
Chandu