Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1070 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Quand une des condition est dans le résultat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Quand une des condition est dans le résultat

n°2221262
tomware
Moteur à eau
Posté le 03-03-2014 à 00:50:41  profilanswer
 

Salut,
 
Je débute dans les fonctions SQL avancées, jointures...
 
J'ai deux tables : membre et look.
 
Elles sont construites de la sorte (je simplifie) :
Table Membre
#id #pseudo #id_look #actif  
5 - tomware - 15 - 1
 
Table look
#id #id_pseudo #cheveux
15 - 5 - 2
 
Je voudrais construire une requete de la sorte :
Sors moi tous les membres actifs (1) qui ont des cheveux (2)
 
Voila ce que j'ai fait
 
 

Citation :


$sql = 'SELECT * FROM membre a JOIN look b  
 WHERE a.actif = 1  
AND b.id_cheveux = 2'


Cette requête me sort un faux résultat. Elle me liste tous les membres actifs (1) et leurs attribuent a tous des cheveux "2" alors que certains ont des valeurs différentes de 2.
   
Bref, la condition "avoir les cheveux 2" se trouve dans les résultats de "être actif 1" de la table membre.  Sachant que ceux qui ont des cheveux (2) ne sont pas forcements actifs (1). Faut il bien faire une jointure ici ?
 
Que faire sinon ?
 
Merci  :hello:


Message édité par tomware le 03-03-2014 à 01:19:31
mood
Publicité
Posté le 03-03-2014 à 00:50:41  profilanswer
 

n°2221266
Farian
Posté le 03-03-2014 à 05:57:47  profilanswer
 

Bonjour,
 
il vous manque une condition "a.id = b.id_pseudo" dans la clause where, pour justement matérialiser la jointure entre les deux tables.
 
Bonne continuation !


Message édité par Farian le 03-03-2014 à 05:58:20
n°2221406
nevin0u
Posté le 04-03-2014 à 09:30:24  profilanswer
 

SELECT * FROM membre m INNER JOIN look l on (m.id_look  = l.id)
 WHERE m.actif = 1  AND l.id_cheveux = 2

n°2221532
Pablo Escr​obarbe
Retour d'exil
Posté le 05-03-2014 à 10:05:16  profilanswer
 

Je vois pas l'intérêt de faire des alias sur une requête aussi  simple Nevin0u.En plus, on le dira jamais assez, le "Select *" est mal mal mal et surtout complètement inutile là. Personnellement je trouve beaucoup plus clair :  

Code :
  1. SELECT membre.id, membre.pseudo FROM membre INNER JOIN look ON membre.id_look= look.id WHERE membre.actif = 1 AND look.id_cheveux= 2


 
Remarque à l'auteur de ce sujet : Si tu veux une personnes possédant DES cheveux ça sera "look.id_cheveux > 1"

n°2221566
gpl73
Posté le 05-03-2014 à 16:24:39  profilanswer
 

Petitpois2 : c'est pour l'exemple que NevinOu a du mettre l'alias et le * c'est pour répondre rapidement... :)
Qu'est ce que cela fait de mettre un alias ou pas? à part d'avoir un code plus clair?  
Est ce que  tu as des temps de réponse meilleur sans ? si oui de combien?  
Moi, je ne vois pas l'interet de répondre à ce genre de post, car c'est abusé de la gentillesse des gens...
Le bon coté, c'est que j'aurai peut être un idée du gain de performance en utilisant un alias ou pas :)
Guillaume


Message édité par gpl73 le 05-03-2014 à 16:25:17
n°2221587
lasnoufle
La seule et unique!
Posté le 05-03-2014 à 19:08:44  profilanswer
 

Salut
 
Je suppose que ca depend du SGBD, mais en theorie l'utilisation d'un alias peut faire une legere difference sur la compilation de la requete, mais pas sur l'execution.
 
Le cas ou les alias sont "mieux" c'est a la place d'un champ non qualifie (donc sans alias ni nom de table): sans alias, le moteur doit determiner lui-meme quelle table contient le champ, alors qu'avec un alias, c'est explicite.
 
Mais encore une fois, c'est seulement dans l'etape de compilation, et en theorie le moteur va sortir exactement le meme plan pour la meme requete avec ou sans alias, donc aucun impact sur l'execution; bref c'est souvent vraiment peanuts au final.
 
Dans le cas au-dessus, j'en sais rien: alias vs le nom de table directement, ca doit vraiment pas changer grand-chose.
 
Maintenant je n'adhere pas au commentaire de Petitpois2: personnellement, meme pour une petite requete comme celle-la, je la lis plus vite avec les alias (tant qu'ils restent simples: membre m, look l). De plus les alias c'est une des "best practice" les plus utiles en SQL je trouve. Du coup je comprends pas trop l'idee de ne pas les generaliser a de petites requetes.
 
Sinon tant qu'on en est dans la sodomie de mouches, pourquoi conseiller d'utiliser INNER JOIN au lieu de seulement JOIN? Ca surcharge la requete sans donner d'information supplementaire.


---------------
C'était vraiment très intéressant.
n°2221588
gilou
Modérateur
Modzilla
Posté le 05-03-2014 à 19:25:20  profilanswer
 

lasnoufle a écrit :

Salut Sinon tant qu'on en est dans la sodomie de mouches, pourquoi conseiller d'utiliser INNER JOIN au lieu de seulement JOIN? Ca surcharge la requete sans donner d'information supplementaire.

Parce que certaines BDD n'acceptent pas un JOIN sans un INNER (LEFT, RIGHT, OUTER, CROSS) devant...
Et une requête plus précise, qui va rien changer quand a l’exécution ça semble nettement mieux à mes yeux.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2221597
gpl73
Posté le 05-03-2014 à 21:39:39  profilanswer
 

Je suis d'accord avec lasnoufle...  
je mets des alias pour:
lire plus facilement mes requêtes,  
par fainéantise et rapidité, car les noms de "mes tables" sont pas aussi simple à écrire... et ainsi gagner de la place, quand tu as des requêtes de la mort, cela vient vite gros...
de trouver l'appartenance à la table, quand on ne reprend une requête et que l'on connait pas tout la BD par cœur :)...
mais c'est vrai que c'est plus des habitudes, qu'autres choses....


Message édité par gpl73 le 05-03-2014 à 21:41:01
n°2221620
Pablo Escr​obarbe
Retour d'exil
Posté le 06-03-2014 à 09:47:50  profilanswer
 

Moi je suis d'accord avec gilou et le "*" c'est une mauvaise habitude qui joue sur la performance aussi.  
Les alias c'est très bien mais ça embrouille aussi, j'ai vu des développeurs qui s'embrouillait dans leurs alias, du coup quand il n'y en pas besoin, je pense (et c'est mon avis personnel) qu'il vaut mieux éviter d'en mettre. Par contre pour les grosses requêtes c'est bien sûr nécessaire.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Quand une des condition est dans le résultat

 

Sujets relatifs
[SQL/PostgreSQL] RENAME COLUM[SQL] ORDER BY selon préférence
La condition en vbs (bloc note)[RESOLU] REQUETE SQL AVEC ID ET ORDER
SqL - requête que designe 2.314424e+069
Affichage avec condition en jstl[SQL] on duplicate key update
Requete SQL en VBA avec ExcelSQL : count multiple, groupby...
Plus de sujets relatifs à : [SQL] Quand une des condition est dans le résultat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR