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 27/07/2011, 15h58   #1
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Par défaut Dédoublonnage sur requête SQL

Bonjour,

J'ai un problème très bête sur une requète. Seulement je ne vois pas comment je vais pouvoir m'en sortir...

Donc j'ai une table A qui contient ceci :

Id | name
10 | André
11 | Raymond
12 | Fréderic

Et j'ai une table B qui contient ceci :

id_A | id_cat
10 | 4
10 | 6
10 | 7
11 | 3
11 | 6
12 | 7
12 | 2

Je voudrais réaliser une requète SQL qui exclus certains enregistrement, de cette manière :

Code :
1
2
3
4
5
 
SELECT A.id, A.name FROM A
LEFT JOIN B ON B.id_A = A.id
WHERE id_cat NOT IN (2,3)
ORDER BY A.name ASC;
Vous l'aurez compris, une personne peut entrer dans une ou plusieurs catégories. Si j'envoie la requête ci dessus, les lignes qui contiennent 2 et 3 dans l'id_cat ne remonte pas, mais les autres si.
Cela me donne ce résultat :
Code :
1
2
3
4
5
6
 
    10   |   André
    10   |   André
    10   |   André
    11   |   Raymond
    12   |   Fréderic
Je voudrais pouvoir exclure des résultats 11 et 12...
Bien evidemment si je mets un DISTINCT sur le A.id, je retrouve avec 3 lignes...
En gros je voudrais que seul André remonte car il n'a pas d'id_cat à 2 ou a 3.

En vous remerciant par avance
Cadoudal56
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 16h06   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,


Regardez l'utilisation de "NOT EXISTS"
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h20   #3
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Code :
1
2
3
4
5
6
7
8
9
SELECT Table3.id, Table3.nom, Table4.id_cat
FROM Table3 INNER JOIN Table4 ON Table3.id = Table4.id_a
WHERE Table3.id NOT IN (
 
 
SELECT  Table3.id
FROM Table3 INNER JOIN Table4 ON Table3.id = Table4.id_a
WHERE (((Table4.id_cat)=2)) OR (((Table4.id_cat)=3))
)

bon courage
n'hesite pas de poser autres questions
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 12h19   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 026
Points : 18 317
Points : 18 317
Envoyer un message via MSN à CinePhil
Plus simplement, si nous avons correctement compris ton besoin :
Code :
1
2
3
4
5
6
7
8
9
SELECT A.id, A.name 
FROM A
WHERE NOT EXISTS
(
  SELECT *
  FROM B
  WHERE B.id_A = A.Id
    AND B.id_cat IN (2, 3)
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h22.


 
 
 
 
Partenaires

Hébergement Web