sql: toujours moi :D : jointure externe

sql: toujours moi :D : jointure externe - Programmation

Marsh Posté le 18-04-2001 à 12:01:27    

si on fait un truc du genre:
 
select t2.c1, t2.c2, max(t1.c3)
from t1, t2
where t2.c1=m and t1.c1(+)=t2.c1 and t1.c2=n
group by t2.c1, t2.c2
 
Est-ce ke si t1.c1 n'existe pas pour t2.c1, la condition t1.c2=n est calculee ?
Bref, comment faire pour ke si t1.c1 n'existe pas ben j'ai qd meme un resultat ?

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 12:01:27   

Reply

Marsh Posté le 18-04-2001 à 13:04:44    

je suis super interresse, car j'ai un pb identique (je pense): j'exploite une cle etrangere qui peut etre vide, donc comment faire pour lui dire que si elle est vide, on veut quand meme un record, mais sans les champs 'etrangers'
Je suis pas forcement clair, mais bon....

Reply

Marsh Posté le 18-04-2001 à 13:10:54    

essaye :
 
 
select t2.c1, t2.c2, max(t1.c3)  
from t1, t2  
where t2.c1=m and t1.c1(+)=t2.c1 and t1.c2 (+) =n  
group by t2.c1, t2.c2


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 18-04-2001 à 13:24:17    

en fait mon truc c ca:
 
select t2.c1, t2.c2, max(t1.c3)  
from t1, t2, t3
where t2.c1=m and t1.c1(+)=t2.c1 and t1.c2=n and t1.c4=t3.c4
and t3.c2='xx'
group by t2.c1, t2.c2
having max(t1.c3)<=max(t2.c3)
 
je sais ke c chelou mais le pb c ke t1.c1=t2.c1 est toujours vrai
mais ce ki le rend faux ce sont les conditions d'apres, dont une jointure (en realité, j'en ai deux jointures apres mais bon)


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 13:30:36    

Putain !
Oracle il avoir a interpréter ca ?

Reply

Marsh Posté le 18-04-2001 à 13:32:34    

...tu peux tenter
(syntaxe Transact-SQL)
 
select t2.c1, t2.c2, isnull (max(t1.c3), "toto" )
from t1, t2  
where t2.c1 = m
and t1.c1 *= t2.c1
and t1.c2 = n  
group by t2.c1, t2.c2

Reply

Marsh Posté le 18-04-2001 à 14:05:29    

Le pb. c ke ces deux conditions semblent incompatibles...
 
and t1.c1 *= t2.c1  
and t1.c2 = n  
 
:(


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 14:18:21    

D'après mes archives, tu as inversé le sens de la jointure...
 
A gauche, tu mets la table pour laquelle la condition est TOUJOURS vérifiée.
 
A droite, la table qui ne la vérifiera qu'éventuellement.

Reply

Marsh Posté le 18-04-2001 à 14:27:26    

sous oracle c l'inverse de sql-server...
oracle : t2.c1=t1.c1(+)
sql-server : t1.c1=*t2.c1
...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 14:33:19    

OK. Donc, en SQL Server, toujours d'après mes archives, ce devrait être :
 
t2.c1 *= t1.c1
 
On va y arriver.
 
 
Dis-moi, tu es en stage???

Reply

Marsh Posté le 18-04-2001 à 14:33:19   

Reply

Marsh Posté le 18-04-2001 à 15:35:59    

non... jsuis pas en stage... :D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 15:48:15    

Ah OK :D
 
Remarque je me moque, mais j'en ai posé des questions après mon stage. Sauf qu'on n'avait pas Internet...
 
Et ça marche ton truc finalement?

Reply

Marsh Posté le 18-04-2001 à 16:03:51    

non... pas tout a fait... il manque un cas.. mais je me penche
du cote d'un union...
La jointure semble inadequate..
Ca fait deja une semaine ke jsuis dessus :cry:


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 16:07:52    

:lol: :lol: :lol:
 
Oh l'insulte !!! Trop fort !!!
 
Je confirme wouatouwouatou n'est pas en stage
 
Pour t'aider:
 
and t1.c1 *= t2.c1  
and t1.c2 = n
 
Rien d'anormal jointure externe à gauche + filtrage

Reply

Marsh Posté le 18-04-2001 à 16:17:52    

Par contre
ca je vois pas trop l'intérêt:
 
t2.c1 = m  
and t1.c1 *= t2.c1  
 
en mettant la condition sur t2.c1 égal à m, tu enlève des résultats toutes les enregistrements de t1 qui ne joignent pas avec t2 car dans ce cas t2.c1 est null
 
soit tu fais
 
t2.c1 = m  
and t1.c1 = t2.c1  
 
soit
 
t2.c1 =* m  
and t1.c1 *= t2.c1

Reply

Marsh Posté le 18-04-2001 à 16:38:37    

Moi c dans l'autre sens...
thegti> jette un coup d'oeil sur mon autre topic...
tu comprendra mon pb.
Plz penche toi unpeu dessus...Jsuis sur ke ca les doigts dans le nez pour toi !!!
Sinon, avec l'union jai pas reussi a trouver... :(
Mais comment faire? avec la jointure c presque ca..:(
J'avais oublié le lien vers le topic:
http://forum.hardware.fr/sqlforum/ [...] ache=cache
j'espere ke c le bon :)

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 17:06:40    

Bon la j'ai beau cherché je vois pas ce que tu veut faire avec ca:
 
select t2.c1, t2.c2, max(t1.c3)    
from t1, t2
where t2.c1=m and t1.c1(+)=t2.c1 and t1.c2=n and t1.c4=t3.c4  
and t3.c2='xx'  
group by t2.c1, t2.c2  
having max(t1.c3)<=max(t2.c3)  
 
C'est quoi le but de la requête ?
 
En tout cas:  
t2.c1=m and t1.c1(+)=t2.c1 and t1.c2=n  
ca va pas
tu perds tout l'interêt de la jointure externe

Reply

Marsh Posté le 18-04-2001 à 17:42:57    

j'ai une table t1, ki contient entre autres, une date (c3),
un id (c1) et une valeur (c4).  
t1 est reliee a une table t2 via une colonne c1 (FK).
t2 contient en plus deux champs c2 et c3 (nom), ou c2 est un FK d'une table t3.
t3 contient un champ c1 (PK) et un champ c2 (description-simple valeur).
 
Donc, je veux les noms de description 'xx' les plus récents.
Mais un nom peut avoir plusieurs valeurs.  
Donc, si un nom possede plus d'une valeur, je veux les deux valeurs les plus récentes.
Sinon, la plus récente et une valeur null pour l'autre.  
Les deux valeurs doivent etre obtenues sur la meme ligne (en même temps).
 
Jsais pas si c clair mais voila mon pb.. ki me torture depuis une semaine !!!!

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 17:44:37    

wouatouwouatou a écrit a écrit :

Moi c dans l'autre sens...
thegti> jette un coup d'oeil sur mon autre topic...
tu comprendra mon pb.
Plz penche toi unpeu dessus...Jsuis sur ke ca les doigts dans le nez pour toi !!!
 




 
KOMMENT CA? ET MOOI ALORS???
 
KI T'A PONDU UN SCRIPT L'AUTRE FOOIS???
 
 
Ho l'autre hé, moi je ne t'aide plus :o

Reply

Marsh Posté le 18-04-2001 à 17:45:34    

J'y jetterai un oeil demain, là il est trop tard pour que je me concentre sur autre chose que mon travail.

Reply

Marsh Posté le 18-04-2001 à 17:48:53    

toutes mes excuses Fred999 :jap::jap::jap::jap::jap::jap::jap::jap::jap::jap::jap::jap:
Mais c valable pour toi aussi :D
J'ai besoin de toute l'aide possible :)
Ca commence a me prendre le chou cette histoire de plus récente en même temps des dates et tout ce sql....


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 18-04-2001 à 17:58:36    

'spèce de fayot  :lol:  
 
Non, t'es le seul que je puisse aider dans ce forum, t'as de la chance :D

 

[edit]--Message édité par Fred999--[/edit]

Reply

Marsh Posté le 18-04-2001 à 18:02:35    

ouais
je comprends encore moins
tu mets dans la requête:
 
....
and t3.c2='xx'  
....
 
puis
 
....
t2 contient deux champs c2 et c3 (nom), ou c2 est un FK d'une table t3.  
....
Donc, je veux les noms de description 'xx' les plus récents.  
....
 
le champ nom c'est c2 ou c3 et c'est dans t2 ou t3 ?
Donne la vrai requête avec les vrais noms de champs parce que là c'est incompréhensible ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed