Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/01/2013, 22h35   #1
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
Par défaut self join foireux

Bonjour à tous,

J'ai un pépin pour exclure du résultat les valeurs si une autre valeur est contenue dans une ligne.

Plus précisément :

Soit 2 tables :

table 1 :
table 2 :
Code :
1
2
3
4
5
 
id 
critere
name
complement
Avec quelques valeurs on a :
table 1
Code :
1
2
3
4
5
 
1 - Mary - gouts
2 - Paul  - gouts
3 - Pierre - gouts
...
table 2
Code :
1
2
3
4
5
6
7
 
1 - gouts - confiture - fraise
2 - gouts - confiture - framboise
3 - gouts - confiture - toto
4 - gouts - yaourt - ananas
5 - gouts - yaourt - fraise
...
Et bien voilà, comment je fais pour dire que si toto existe dans le complément, alors toute la colonne name ne sera as prise en compte (ici confiture)

Tentative :
Code :
1
2
3
4
5
6
7
8
 
SELECT `t1`.`name`
FROM `table1` `t1`
 
JOIN `table2` `t2`
ON `t2`.`critere` = `t1`.`critere`
 
WHERE `t2`.`complement` NOT IN ('toto')
Et en fait, ce code me lâche quand même confiture dans les résultats.

Vous avez une piste ?

Attention, ce n'est pas un exemple applicatif, mais de logique, on se contrefout des goûts et autres confitures

Merci à vous,

A bientôt,

LeHibou
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/01/2013, 09h40   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 672
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 : 13 672
Points : 25 526
Points : 25 526
Envoyer un message via MSN à CinePhil
La requête que tu donnes ne va pas te donner 'confiture' mais l'ensemble {Mary, Paul, Pierre} puisque tu ne sélectionnes que t1.name.

Ensuite, puisque ta restriction (WHERE) ne porte que sur t2.complement, seules les lignes jointes avec toto seront exclues mais pas celles avec fraise ni framboise.

Plutôt que de prendre un exemple bidon, donne la vraie structure de tes tables, des données exemples, le résultat attendu et une exeplication claire de ce que tu souhaites obtenir. Pour le moment, on ne peut que conjecturer une solution.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
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 la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 09h52   #3
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
Bonjour Cinéphil,

Et bonne année à tous.

Sans déconner, plus clair que ça ?

Citation:
Et bien voilà, comment je fais pour dire que si toto existe dans le complément, alors toute la colonne name ne sera pas prise en compte (ici confiture)
Les exemples sont peut-être bidons, mais la logique reste identique !

Le problème, c'est que c'est une pelote de laine et impossible de tout placer ici sans gonfler les forumeurs.

Je vais mettre à jour l'exemple.
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 02/01/2013, 10h12   #4
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 208
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 208
Points : 3 567
Points : 3 567
bonjour,

Non c'est pas claire, vous inversez complément / name .. ou alors j'ai rien compris.
De plus j'ai pas compris non plus le résultat attendu.


Indiquez le résultat souhaité en partant de votre exemple d'entrée.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 10h35   #5
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
Si je suis un incompris, je le vis bien car j'ai réussi.

J'ai fais un "not in" suivi d'une sous requête.

Simple. Efficace.

Merci à vous,

A bientôt,

LeHibou
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 02
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h12.


 
 
 
 
Partenaires

Hébergement Web