mysql : jointure a gauche et a droite.. est-ce fesable ?

mysql : jointure a gauche et a droite.. est-ce fesable ? - SQL/NoSQL - Programmation

Marsh Posté le 16-04-2003 à 19:20:19    

euh. en fait, mon pb c comment kon fait de telles jointures en mysql ?
 
un truc du genre
 
select t1.a, t1.b, t2.c from t1, t2
where t1.a = 1 and t1.c =+ t2.a
 
enfin.. le truc c ke mm si t1.c != t2.a alors l'enregistrement est qd mm pris en compte.
 
Merci d'avancepour l'aide... :D


Message édité par wouatouwouatou le 16-04-2003 à 19:59:25
Reply

Marsh Posté le 16-04-2003 à 19:20:19   

Reply

Marsh Posté le 16-04-2003 à 19:38:07    

Si tu prends tous les enregistrements, même ceux "différents", ce n'est plus la peine de mettre cette condition [:figti]  
 
select t1.a, t1.b, t2.c
from t1, t2  
where t1.a = 1


Message édité par mrbebert le 16-04-2003 à 19:38:28
Reply

Marsh Posté le 16-04-2003 à 19:43:18    

:??:

Reply

Marsh Posté le 16-04-2003 à 19:49:31    

mais encore :D

Reply

Marsh Posté le 16-04-2003 à 19:56:52    

en fait... est-ce que de telles jointure sont fesables en mysql ?
 
au fait, le truc de l'exemple...
euh... c t ptet pa assez clair.. dsl :D
 
je tente nu nouvel essai :p
 
select t1.a, t1.b, t2.c from t1, t2  
where t1.a = 1 and t1.c =+ t2.a  
 
est sensé me retourner tous les enregistrements avec t1.a valant 1 ... meme si t1.c != t2.a
Mais si t1.c = t2.a alors jaurais mon fameux t2.c dans le meme enregistrement...
sinon, j'obtiendrai un 'simple' produit cartesien des deux tables... enfin, je crois.. j'espere du moins ke c plu clair
 
Merci encore pour ton interet :jap:

Reply

Marsh Posté le 16-04-2003 à 20:07:27    

Tu veux toutes les lignes avec t1.a qui vaut 1, ca, d'accord :)  
 
C'est pour t2 que je comprends pas. Tu veux toutes les lignes de t2, quelque soit la valeur de t2.a ??
Ou seulement celles où t2.a = t1.c, s'il y en a ???

Reply

Marsh Posté le 16-04-2003 à 20:13:26    

écrit ta requête en format à la con :
 
select t1.a, t1.b, nvl(t2.c, ' ';) from t1 left outer join t2 on t1.c = t2.a
where t1.a = 1
 
il me semble que ça passe sous mysql
 
PS: "nvl" est la fonction qui permet d'échapper la valeur "NULL" sour Oracle.
 
Je sais pas si MySQL en a besoin, mais sous Oracle, il faut absoluement l'échapper, sinon ça retourne rien. SQL Server de M$ n'a pas ce problème (Oracle c'est super standard, ça fait plaisir :D


Message édité par MagicBuzz le 16-04-2003 à 20:15:23
Reply

Marsh Posté le 16-04-2003 à 20:15:09    

ben les deux je dirais.. :D
 
je veux celle de t2.c s'il yen a et bien sur.. celles-ci seront dnas le mm enregistrement que t1.a et t1.b
Mais si par hasard t1.c ne fait pa partie de t2... alors l'enregistrement t1.a et t1.b est qd mm retourné...
 
Ben.. en bref.. une jointure a gauche.. koi (ou ptet a droite,bref jsais plus le sens :D )

Reply

Marsh Posté le 16-04-2003 à 20:25:56    

oui, c'est un left join :)  
 
SELECT t1.a, t1.b, t2.c
FROM t1
LEFT JOIN t2 ON t1.c = t2.a
WHERE t1.a = 1
 
Ca fait pareil qu'une jointure normale sauf que, en plus, ca ramène quand même les lignes de t1 où a = 1 et qui n'ont pas leur équivalent dans t2. Dans ce cas, t2.c sera à NULL.
 
MagicBuzz > Ca fait quoi "nvl(t2.c, ' ';)" :??:


Message édité par mrbebert le 16-04-2003 à 20:26:36
Reply

Marsh Posté le 16-04-2003 à 20:30:28    

cool. je test de suite.. pour nvl.. je crois que ca te met ' ' si t2.C vaut null :)

Reply

Marsh Posté le 16-04-2003 à 20:30:28   

Reply

Marsh Posté le 16-04-2003 à 20:31:15    

j'ai expliqué dans le "PS" : c'est une bidouille pour qu'Oracle soit capable de faire un left join, sinon il zappe quand même les lignes où t2 est vide :/

Reply

Marsh Posté le 16-04-2003 à 20:35:07    

euh.. merci ... ca a lair de marcher..
 
pour le nvl.. je lai pa mis et ca a lair de passer...
Et pis, jai pas mis outer... ca fait une difference ?

Reply

Marsh Posté le 16-04-2003 à 20:38:14    

MagicBuzz a écrit :

j'ai expliqué dans le "PS" : c'est une bidouille pour qu'Oracle soit capable de faire un left join, sinon il zappe quand même les lignes où t2 est vide :/

Ca lui pose un problème que le t2.c soit NULL dans le résultat :??:

Reply

Marsh Posté le 16-04-2003 à 20:41:06    

wouatouwouatou a écrit :

euh.. merci ... ca a lair de marcher..
 
pour le nvl.. je lai pa mis et ca a lair de passer...
Et pis, jai pas mis outer... ca fait une difference ?

Pour le nvl(), l'équivalent sous mysql est IFNULL().
IFNULL(a, b) renvoie b si a est à NULL, sinon il renvoie a.
 
Mais ca dépend de ce que tu veux faire. Tu peux vouloir conserver le NULL pour faire facilement la distinction, ou aucontraire le remplacer par une valeur par défaut.
 
Pour le outer, je pense que mysql accepte les 2 syntaxes, ca revient au même :)

Reply

Marsh Posté le 16-04-2003 à 20:43:00    

merci.. :jap:
juste ce que je cherchais.. lol
 
a propos de mon second post :D

Reply

Marsh Posté le 16-04-2003 à 20:47:18    

mrBebert a écrit :

Ca lui pose un problème que le t2.c soit NULL dans le résultat :??:  


pour oracle, oui :/

Reply

Sujets relatifs:

Leave a Replay

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