|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
Bonjour,
Concernant l'article traitant des métadonnées, et plus particulièrement la partie intérrogation: http://sqlpro.developpez.com/cours/m...adonnees/#L2.4 Lorsque l'on souhaite récupérer l'ensemble des données qui satisfont plusieurs conditions sur un ensemble de caractéristiques, j'ai du mal à comprendre comment la requête suivante peut répondre à cette problématique: Code :
Or il me semble que lorsqu'on arrive ici: Code :
Dit autrement, je comprends que cette requête ne peut que renvoyer un ensemble vide. Dans la table T_DONNEES_DON, chaque ligne est associée à une valeur unique de CAR_ID, et ne peut donc satisfaire une condition du type CAR_ID=8 AND CAR_ID=9... Pouvez -vous m'indiquer ce que je n'ai pas compris ? Merci d'avance |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Je crois que tu as raison et qu'il manque des parenthèses et des OR :
Code :
__________________
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 ! |
||
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
Certes. Le probleme de cette requête c'est qu'elle permet en effet de faire une requête de type OR sur plusieurs conditions, mais que si l'on souhaite faire plutôt faire un AND, on en revient au problème indiqué au départ, avec ou sans parenthèses...
Je crois que sur ce type de modèle, filtrer les données est loin dêtre aussi simple qu'il n'y parait... En tout cas je n'ai pas trouvé d'autres solutions que d'executer des requêtes successives (une par condition) et de traiter les résultats dans le code client... |
|
|
00
|
|
|
#4 | ||||||||||||||||||||||
![]() ![]() |
Reprenons la requête complète :
Code :
Corrigeons-la : Code :
TR_PROSPECT_PRP (PRP_ID, PRP_NOM, PRP_PRENOM...) 1, 'Dupont', 'Jean' 2, 'Durand', 'Jacques' 3, 'Duchmol', 'Eddy' T_DONNEE_DON (TBL_ID, CAR_ID, CRE_LIGNE, CRE_VALEUR) 1, 12, 2, 'xyz' 44, 475, 1, 'toto' 44, 475, 2, 'valeur 2' 12, 475, 4, 'titi' 44, 123, 3, 'valeur 1' Faisons la jointure avec la restriction sur TBL_ID : Code :
1, 'Dupont', 'Jean', 44, 475, 1, 'toto' 2, 'Durand', 'Jacques', 44, 475, 2, 'valeur 2' 3, 'Duchmol', 'Eddy', 44, 123, 3, 'valeur 1' Voyons les autres restrictions : Code :
3, 'Duchmol', 'Eddy', 44, 123, 3, 'valeur 1' Ajoutons la condition suivante : Code :
![]() Maintenant avec OR... La requête complète : Code :
PRP_ID, PRP_NOM, PRP_PRENOM, TBL_ID, CAR_ID, CRE_LIGNE, CRE_VALEUR 1, 'Dupont', 'Jean', 44, 475, 1, 'toto' 2, 'Durand', 'Jacques', 44, 475, 2, 'valeur 2' 3, 'Duchmol', 'Eddy', 44, 123, 3, 'valeur 1' Simplifions le WHERE : Code :
Code :
3, 'Duchmol', 'Eddy', 44, 123, 3, 'valeur 1' Code :
2, 'Durand', 'Jacques', 44, 475, 2, 'valeur 2' Code :
Code :
Résultat final : on conserve les lignes 2 et 3 : 2, 'Durand', 'Jacques', 44, 475, 2, 'valeur 2' 3, 'Duchmol', 'Eddy', 44, 123, 3, 'valeur 1' => Nous avons ici les prospects qui ont au moins une des valeurs pour les caractéristiques testées Mais peut-être que ce résultat n'est pas celui souhaité ? Ne voulait-on pas plutôt, avec ce modèle, les prospects qui répondent à un ensemble de valeurs pour certaines caractéristiques ? Alors il faut faire autant de jointures qu'il y a de caractéristiques à tester, ce qui peut devenir très lourd ! C'est peut-être aussi pour ça que ce modèle est peu utilisé ?
__________________
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 ! |
||||||||||||||||||||||
|
00
|
|
|
#5 | ||
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 488 ![]() |
Citation:
Citation:
Je ne sais pas si il est peu utilisé... Je pense surtout qu'il est utilisé dans des cas bien précis, et notamment lorsqu'il n'y a pas trop de données, car sur le papier l'approche est fort séduisante. Le gros probleme (dans mon cas par exemple), c'est lorsqu'il y a beaucoup d'entités, beaucoup de propriétés, et que l'on a besoin d'explorer un peu tout ca à l'aide de filtres. Sinon c'est tout a fait gérable... Plus d'info pour les curieux, en plus de l'article de SQLpro: http://en.wikipedia.org/wiki/Entity-...te-value_model |
||
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Citation:
Code SQL :
J'ai pas testé, mais ça me semble une bonne piste (à améliorer peut etre pour les perfs ?) |
||||
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Oui je pense que ta requête fonctionne et répondrait au besoin (pas testé non plus).
Et au passage, je crois qu'au lieu de la cascade OR, on peut utiliser IN sur un couple de colonnes mais je ne suis pas sûr de la syntaxe (la flemme de vérifier Code :
__________________
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 ! |
||
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
À ma connaissance, il n'y a qu'Oracle et PostgreSQL.
__________________
Email : http://scr.im/waldar |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com