Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 13/01/2011, 01h39   #1
Candidat au titre de Membre du Club
 
Stephen
Inscription : mars 2009
Messages : 59
Détails du profil
Informations personnelles :
Nom : Stephen
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 59
Points : 13
Points : 13
Par défaut Doublons sur deux champs

Bonjour,

Je cherche a extraire des enregistrements dans une base de donnees en supprimant les doublons. Les doublons peuvent etre de cette forme :

ContactID - LastName - FirstName - Adresss - Phone - etc.
----------------------------------------------------------
1 Here John 55 etc. 000 ...
2 AAA Evan 99 etc. 000 ...
3 Here John 55 etc. 000 ...
4 BBB Ross 33 etc. 000 ...
etc.

Les "Here - John" sont en doublons et j'ai plusieurs enregistrements ainsi. Le doublon porte uniquement sur le champ LastName et FirstName. J'essaye d'etraire tous les enregistrements differents c'est a dire ceux ou Last et First name ne sont pas pareil. J'ai essaye cela :
Code :
1
2
3
4
5
6
7
8
SELECT tblCustomers.*
FROM tblContacts LEFT JOIN tblCustomers ON tblContacts.CustomerID = tblCustomers.CustomerID
WHERE EXISTS (
SELECT first( tblContacts.ContactFirstName),first( tblContacts.ContactLastName), first( tblContacts.ContactID)
FROM  tblContacts LEFT OUTER JOIN tblCustomers
ON tblContacts.CustomerID = tblCustomers.CustomerID
GROUP BY tblContacts.ContactFirstName&tblContacts.ContactLastName;
);
Mais il me sort les enregistrements de toute la table (510) alors qu'il y a 484 enregistrements non doublons. Je le sais car la sous-requete me sort les 484 mais seulement sur le LastName et firstName. or j'ai beaucoup de colonnes (20) et je me dis que faire le first() sur toutes les colonnes va donner une requete tres lourde. Et je ne peux pas faire de first sur *.

Comment extraire mes enregistrements sans doublons sur ces deux champs ?
Steph0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 07h28   #2
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Il manque une restriction dans ton exists, actuellement il ne sert à rien, soit il n'y a déjà pas de ligne dans tblCustomers et exists sera à faux, soit il y a des lignes et exists sera à vrai! Quand je dis une restriction, c'est qu'il n'y a pas de filtre dans le exists entre l'interieur et l'extérieur.

Voilà une requête qui te sort tes contact sans les contact en doublons, ce qui veut dire que clients de contact_id 1 et 3 n'apparaitront pas.
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT Cu.customer_id, Cu.....
FROM tblContacts C2
INNER JOIN 
(
	SELECT C1.ContactFirstName,C1.ContactLastName, min(C1.Contact_id) min_contact_id
	FROM tblContacts C1
	GROUP BY C1.ContactFirstName,C1.ContactLastName
	HAVING count(*)=1
) AS SD
ON C2.Contact_id=SD.min_contact_id
LEFT JOIN tblCustomers Cu ON C2.CustomerID = Cu.CustomerID;
Je ne suis pas sure d'avoir compris ce que tu voulais faire.
J'ai remplacé ton tblCustomers.* par Cu.customer_id, etc car mettre des * est contre productif. Voir l'article: http://www.expreg.com/fred_article.p...re_des_etoiles
A+
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 23h03   #3
Candidat au titre de Membre du Club
 
Stephen
Inscription : mars 2009
Messages : 59
Détails du profil
Informations personnelles :
Nom : Stephen
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 59
Points : 13
Points : 13
Bonjour,

Ce n'etait pas tout a fait ça que je recherchais, mais ça m'a permis d'entrevoir un article interessant sur l'utilisation du SELECT *.

Entre temps j'ai reussi a resoudre mon probleme par d'autres moyens.

Merci,
Steph0 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 16h32.


 
 
 
 
Partenaires

Hébergement Web