|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2008 Messages : 3 ![]() |
Bonjour a tous.
Je suis tombé sur une requête en SQL dont je n'arrive pas à comprendre le fonctionnement. Etant un novice dans ce domaine, je sollicite votre aide pour m'aider à comprendre son fonctionnement. Petit prérequis, la table hbat contient les colonnes suivantes : id : l'id du batiment (non unique) num_version : le numéro de version des infos sur le bâtiment (un bâtiment peut avoir plusieur fois la même version) libelle : le nom du bâtiment ts_statut : date de la dernière modification des informations du bâtiment En gros cette requête permet de générer la date de fin d'une version, (en prenant la date de début de la version suivante). ex pour les tuples suivants : id=3 num_version=2 ts_statut=10/02/2001 id=3 num_version=2 ts_statut=13/02/2001 id=3 num_version=2 ts_statut=18/02/2001 id=3 num_version=3 ts_statut=22/02/2001 pour le batiment 3, version 2, debut :10/02/2001, fin : 22/02/2001 pour le batiment 3, version 3, debut :22/02/2001, fin : --- et voilà la requête : Code :
Merci d'avance pour vos réponses |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
bonjour,
toutes les réponses sont ici : http://sqlpro.developpez.com/cours/sqlaz/ensembles/ ceci étant dit vous devriez commencer par ca : http://sqlpro.developpez.com/cours/sqlaz/select/ et ca : http://sqlpro.developpez.com/cours/sqlaz/jointures/ |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 3 ![]() |
Merci pour ces liens, cependant ce n'est pas un élément du SQL qui me pose problème, mais la logique qu'il y a derrière la requête.
Dans l'absolue, je sais à quoi sert un group by, un where ou une jointure externe, mais dans mon cas je ne comprends pas comment la requête va me donner le résultat que j’attends. Mon interrogation se situe notamment au niveau de la seconde clause where : Code :
bat.num_version = bat2.num_version(+) - 1 |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
Ah forcément quand vosu expliquez ce que vosu ne comprennez pas .. on pourra mieux vous répondre.
Je vois la chose comme ça : La date de fin d'une version correspond à la date minimum de la version supérieur. Le (+) ici sert à faire une jointure externe (oracle non ?). Du coup pour la version 2 il va prendre la date min de la v2 pour la date de début et la date min de la v3 pour la de fin de la v2 (et donc qui sera la date de début de la v3 |
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Remplacez (mentalement) les colonnes par leur valeur.
id=3 num_version=2 ts_statut=10/02/2001 id=3 num_version=3 ts_statut=22/02/2001 Code :
On dirait du Oracle, si oui en connaissez-vous la version ?
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#6 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Au passage, on comprend mieux les choses avec des jointures normalisées (clause LEFT JOIN ou RIGHT JOIN pour les jointures externes)...
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 3 ![]() |
Merci à tous pour vos réponses.
Effectivement en posant la jointure sur papier avec l'exemple de Waldar, j'ai mieux compris comment ça fonctionnait. Je pense que c'est la jointure externe qui me perturbait. Merci à tous pour vos réponses, je vais pouvoir avancer. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com