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 17/11/2010, 17h58   #1
Membre à l'essai
 
Inscription : novembre 2005
Messages : 122
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 122
Points : 21
Points : 21
Par défaut Requête qui ignore les doublons

Bonjour,

Soit la table suivante :

id | label | state
-----------------
1 toto 1
2 toto 0
3 titi 1
4 tata 1

J'aimerais faire un select qui me renvoie ça:

3 titi 1
4 tata 1

Autrement dit, j'aimerais ignorer les lignes qui ont des doublons sur la colonne label.
Je ne vois pas trop comment je pourrais m'y prendre sachant qu'il faut que la requête soit la plus optimisée possible. Exit les jointures dans tous les sens donc.
Quelqu'un a une idée?
Hypnocrate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 18h17   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 070
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 070
Points : 1 854
Points : 1 854
Bonjour,
Je vois un truc du genre:
Code SQL :
1
2
3
4
5
 
SELECT T1.*
FROM MaTable T1
LEFT OUTER JOIN MaTable T2 ON T1.label = T2.label AND T1.id <> T2.id
WHERE T2.id IS NULL

Par contre sans index sur le label, la requête risque de ne pas être très optimisée...

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 22h44   #3
Membre à l'essai
 
Inscription : novembre 2005
Messages : 122
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 122
Points : 21
Points : 21
Merci c'est la requête que je cherchais. Par contre il n'y a vraiment pas moyen d'éviter une jointure? Avec la table que j'ai (plusieurs 100aines de millions de ligne), même avec un index, je crains que ça lag à mort.
Hypnocrate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 23h59   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 479
Points : 10 479
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous pouvez faire ainsi :
Code :
1
2
3
4
  SELECT min(id) AS id, label, min(state) AS state
    FROM MaTable
GROUP BY label
  HAVING count(*) = 1;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 20h24   #5
Membre à l'essai
 
Inscription : novembre 2005
Messages : 122
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 122
Points : 21
Points : 21
Merci Waldar. je n'y aurais pas pensé.
Hypnocrate 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 18h08.


 
 
 
 
Partenaires

Hébergement Web