0
votes

Trouvez des noms en double à partir de la table SQL avec la clé primaire

Je veux trouver des noms en double à partir d'une table SQL à l'aide de la clé principale ou de la colonne d'identité principale.

J'ai trois colonnes: id, fiancys, secondame. p>

Je récupère des données en utilisant ce qui suit Query: P>

SELECT FirstNameAR, SecondNameAR, COUNT(*)
FROM Persons
GROUP BY FirstNameAR, SecondNameAR
HAVING COUNT(*) > 1 


1 commentaires

Espérons que cela conduira à quelqu'un à créer la contrainte appropriée pour appliquer l'unicité des 2 noms. Une clé primaire synthétique ne soulage pas le DBA d'identifier et d'appliquer des clés naturelles.


3 Réponses :


2
votes

JOINT JUSTE Retour à votre table:

SELECT  P.* 
FROM    Persons AS P
INNER JOIN (
                SELECT FirstNameAR
                ,       SecondNameAR
                FROM    Persons
                GROUP BY FirstNameAR
                ,       SecondNameAR
                HAVING COUNT(*) > 1 
            ) AS DUB
        ON  DUB.FirstNameAR = P.FirstNameAR
        AND DUB.SecondNameAR = P.SecondNameAR


1 commentaires

Ce. Dans des situations où vous avez un tel problème, il est utile de casser votre problème dans des pièces simples. Vous devez faire deux choses: obtenir les duplicats, puis obtenir l'identifiant des duplicats. Vous devez donc effectuer deux questions et rejoindre-les.



1
votes

Un moyen est d'utiliser le compte comme fonction de fenêtre:

WITH CTE AS
(
    SELECT Id
         , FirstNameAR
         , SecondNameAR
         , COUNT(*) OVER(PARTITION BY FirstNameAR, SecondNameAR) As Cnt
    FROM Persons
)

SELECT  Id
      , FirstNameAR
      , SecondNameAR
      , Cnt As [Number of duplicates]
FROM CTE
WHERE Cnt > 1



1
votes
SELECT FirstNameAR, SecondNameAR,COUNT(*), string_agg(id,',')
FROM Persons
GROUP BY FirstNameAR, SecondNameAR
HAVING COUNT(*) > 1 
Try this one if you use SQL Server 2017 or SQL Server Vnext, SQL Azure:)

0 commentaires