[ MySql] - Requête multi-tables

Résolu
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 31 mai 2013 à 15:49
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

2 réponses

pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
3 juin 2013 à 11:41
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
3
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
Modifié par jordane45 le 30/01/2015 à 11:19
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
0
Rejoignez-nous