Pb jointure externes [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
7 février 2008
-
Messages postés
4
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
7 février 2008
-
Bonjour,

J'ai problème avec une requête  SQL en jointure.
2 tables :
1ere table : id(cléprimaire) / description/ statut 
2ème table : id /date de l'action/ action

exemple :
1ere table:    1 / incident concernant le routage / ouvert
             2 / incident connection / ouvert
            3 / retard livraison  / clos

2eme table :   1 / 01/01/2008 10:00/ contact
             1 / 01/01/2008 12:00/ relance
             2 / 02/01/2008  08:00/ contact
             3 / 12/12/2007  09:00/ mail 

je voudrais récuperer l'ensemble des données de la premiere table dont le statut est ouvert et les données les plus récentes de la deuxième table pour chaque enregistrement de la 1ere table

je lance ma requète :
SELECT table1* , table2.action FROM  table1 LEFT OUTER JOIN  table2 ON table1.idtable2.id AND date de l'action(Select MAX(date de l'action) From table2)
WHERE Table1.Statut ='Ouvert'

cette requete  remonte bien l'ensemble de la table 1( excepter l'id3) mais uniquement l'action "2 / 02/01/2008  08:00/ contact" de ladeuxième table et pas l'action " 1 / 01/01/2008 12:00/ relance"

Quelqu'un a t il une idée pour recuperer ces données ?

merci
Astondb9
A voir également:

9 réponses

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut,
c 'est normal ! puisque tu fais un regroupement dans la table2 et que tu ne prend que la date maximale 02/01/2008 , qui correspond au 2.
Essaies :
SELECT table1* , table2.action FROM  table1 LEFT OUTER JOIN  table2 ON table1.idtable2.id <strike>AND date de l'action(Select MAX(date de l'action) From table2)
</strike>WHERE Table1.Statut ='Ouvert'
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
4
salut (re) => Post Croisé avec Max (Salut !)

A toi de choisir la soluce qui te convient le mieux.

Pat

 Don't Worry , Be Happy


<hr />lorsque le problème est résolu, pensez Réponse Acceptée
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Autant pour moi !
je viens de relire et je m' aperçois de mon erreur

et les données les plus récentes de la deuxième table
encore une fois désolé. <hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
4
salut,
ton pb vient de la clause " date de l'action =(Select MAX(date de l'action) From table2) "
tu récupères toutes les données dont la date est églae à max(date action)
dans ton cas, Max(date action) = 02/01/2008
ce qui revient a écrire And Date de l'action = '02/01/2008'
tu n'as qu'un enreg qui correspond à ce critère.
pour n'avoir que l'élément le plus récent de chaque élément de table 1, j'essaierais ceci


SELECT table1.* ,


(Select Top 1 DateAction FROM  Table2 Where Table1.ID = Table2.ID Order By DateAction Desc) as DateAction,


(Select Top 1 Action FROM  Table2 Where Table1.ID = Table2.ID Order By DateAction Desc) as
Action


From Table1

WHERE Table1.Statut ='Ouvert'

Sur ce

@+






Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut pneau

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
4
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
7 février 2008

Ok c'est super.
Je ne pensais pas que l'on pouvait inclure un select directement dans le premier select
 d'une requete

Merci encore
Astondb9
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Excuses moi mais tu veux toutes les occurences de tables2 dont
le statut est ouvert
1 / 01/01/2008 10:00/ contact
1 / 01/01/2008 12:00/ relance
2 / 02/01/2008  08:00/ contact


ou tu ne veux qu' une ?


Si tu les veux toutes, pas la peine d' imbriquer un 2 ième select.

SELECT table1* , table2.action
FROM  table1 LEFT OUTER JOIN  table2 ON table1.id= table2.id
WHERE Table1.Statut ='Ouvert'


suffira.
                 
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
4
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
7 février 2008

Astondb9
Messages postés
4
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
7 février 2008

Pas de probléme je n'étais pas sur que ce soit très compréhensible

Astondb9