Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 10h39   #1
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Par défaut Contrôle champs identiques dans une table

Bonjour à tous!

J'ai dans une table "contact" 3 colonnes intitulées Nom, Prénom et Userid:


Code :
1
2
3
4
5
6
7
8
Nom           Prénom         Userid
DUPONT	    JUDIT	   JLOZAxxxxx
DURANT	    RAQUEL	   RARAQxxxxx
JOBERT	    LAURA	   LGORDxxxxx
JOBERT	    LAURA	   LBAYHyyyy
TASSIN 	    Celine	   CCRIExxxxx
TARTUFFE    Roger          TROGxxxxx
etc...

Je cherche simplement à réaliser une requête me permettant de repérer dans ma table les utilisateurs ayant un nom et un prenom identique mais ayant un userid diffèrent.
Ainsi dans mon exemple de table j'aurais en sorti:
JOBERT LAURA LGORDxxxxx
JOBERT LAURA LBAYHyyyy

J'ai tâté du groupby, having tout ça, mais ne suis parvenu à rien de concluant.

Quelqu'un saurait-il facilement m'aider ?

D'avance merci!

Fingertip.
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h30   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Une solution :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DECLARE @t TABLE
(
 nom VARCHAR(50),
 prenom VARCHAR(50),
 userid VARCHAR(50)
)
 
INSERT @T VALUES ('DUPONT','JUDIT','JLOZAxxxxx');
INSERT @T VALUES ('DURANT', 'RAQUEL','RARAQxxxxx')
INSERT @T VALUES ('JOBERT','LAURA',	 'LGORDxxxxx')
INSERT @T VALUES ('JOBERT','LAURA',	'LBAYHyyyy')
INSERT @T VALUES ('TASSIN','Celine', 'CCRIExxxxx')
INSERT @T VALUES ('TARTUFFE','Roger','TROGxxxxx')
 
SELECT 
 DISTINCT
 T.nom,
 T.prenom,
 T.userid
FROM @t AS T
INNER JOIN @t AS T2
 ON T.nom = T2.nom
  AND T.prenom = T2.prenom
WHERE T.userid <> T2.userid
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h24   #3
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Comment fonctionne cette requête ?

La table "@t" est crée temporairement ? Elle est effacé après chaque utilisation de la requête ?

Y'a t-il un moyen d'INSERT l'intégralité de ma table de contact automatiquement?
Celle-ci contient plus de 10000 entrée, je n'ai donc pas l'intention de tous les taper à la main.

Merci!
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h28   #4
Membre éprouvé
 
Inscription : avril 2005
Messages : 884
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 884
Points : 431
Points : 431
Même réponse, un JOIN d'une table sur elle-même permet de repérer des doublons:
Code :
1
2
3
4
5
SELECT a.*
FROM Contact a
JOIN Contact b
 ON a.Nom=b.Nom AND a.Prenom=b.Prenom
 AND a.UserId <> b.UserId
Il m'arrive de suprimer un des doublons en utilisant le même genre de requête:
Code :
1
2
3
4
5
DELETE FROM a
FROM Contact a
JOIN Contact b
 ON a.Nom=b.Nom AND a.Prenom=b.Prenom
 AND a.UserId > b.UserId
camboui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h42   #5
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Oui parfait je m'en était rendu compte en bidouillant la requête du post précédent!

Merci à vous, cette technique va me servir à plusieurs endroits ,)
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h56   #6
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 611
Points : 1 611
Si le nom et le prenom doivent etre uniques, posez une contrainte plutot que de faire du nettoyage par la suite...

Cependant c'est pas une bonne idee d'apres moi, vous risqueriez d'avoir des plaintes de John Smith ou de Pierre Dupont...
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web