[ MySql] - Requête multi-tables [Résolu]

Messages postés
25973
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
- - Dernière réponse : pmcoste
Messages postés
72
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
25 juillet 2013
- 3 juin 2013 à 11:41
Bonjour.

Je dois réaliser une requête sur 3 tables avec des conditions...

Première table :
ID TITRE NumeroDossier Type Version ID_APP_DOSSIER
1 Test 4444 A 1 2
2 Test2 4444 A 2 2
3 Test4 5555 A 1 7

La deuxieme table fait le lien entre le ID_APP de la précédente table avec une troisième table contenant différentes informations

IDAPP_DOSSIER NUM_APP
2 12345
2 678
...
7 678

Troisième table :
ID_APPNUM APP_nom APP_type
12345 First RESEAU
678 Second BUREAU
...



Donc, en gros,
Il faut que je puisse récupérer Les champs
TITRE NumeroDossier Type (de la première table) lorsque pour chaque (MAX(Version) de chaque NuméroDossier
Auquel j'ajoute les APP_Nom et APP_Type correspondants
sachant qu'il peut y avoir plusieurs APP pour chaque dossier...


Ce qui donnerait pour cet exemple :

Test2 4444 A First RESEAU
Test2 4444 A Second BUREAU
Test4 5555 A Second BUREAU

Je ne sais pas vraiment quelle forme de jointure je pourrais essayer d'utiliser pour réaliser cela.





Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
72
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
25 juillet 2013
1
3
Merci
Houps, j'ai posté trop vite et ai oublié le group by dans la sous-requête !

Select NumeroDossier, max(Version) as MVersion
From Table1
Group By NumeroDossier



Select t1.Titre, t1.NumeroDossier, t1.Type, t1.Version
       , t3.APP_nom, t3.APP_type
From Table1 as t1
Inner Join
         (Select NumeroDossier, max(Version) as MVersion
          From Table1
          Group By NumeroDossier
         ) as maxVersion
         On t1.NumDossier=maxVersion.NumeroDossier
            And t1.Version=maxVersion.MVersion
Inner Join Table2 as t2 On t1.ID_APP_DOSSIER=t2.IDAPP_DOSSIER
Inner Join Table3 as t3 On t2.NUM_APP= t2.ID_APPNUM



-------------------
Oderint dum metuant

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de pmcoste
Messages postés
72
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
25 juillet 2013
1
0
Merci
Bonjour,

Le plus simple est de passer par un sous-requête pour d'abord récupérer le max(version) par numeroDossier :
Select NumeroDossier, max(Version) as MVersion
From Table1



Ensuite, il faut récupérer l'ensemble des dossiers pour ces max(version) :

Select t1.Titre, t1.NumeroDossier, t1.Type, t1.Version
From Table1 as t1
Inner Join
         (Select NumeroDossier, max(Version) as MVersion
          From Table1
         ) as maxVersion
         On t1.NumDossier=maxVersion.NumeroDossier
            And t1.Version=maxVersion.MVersion


Il ne te reste plus qu'à faire le lien avec les autres tables pour récupérer l'ensemble de tes données :

Select t1.Titre, t1.NumeroDossier, t1.Type, t1.Version
       , t3.APP_nom, t3.APP_type
From Table1 as t1
Inner Join
         (Select NumeroDossier, max(Version) as MVersion
          From Table1
         ) as maxVersion
         On t1.NumDossier=maxVersion.NumeroDossier
            And t1.Version=maxVersion.MVersion
Inner Join Table2 as t2 On t1.ID_APP_DOSSIER=t2.IDAPP_DOSSIER
Inner Join Table3 as t3 On t2.NUM_APP= t2.ID_APPNUM




-------------------
Oderint dum metuant
Commenter la réponse de pmcoste