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
3 Réponses :
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
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.
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
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:)
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.