mysql : jointure a gauche et a droite.. est-ce fesable ? - SQL/NoSQL - Programmation
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] [:figti]](https://forum-images.hardware.fr/images/perso/figti.gif) 
  
 
select t1.a, t1.b, t2.c 
from t1, t2  
where t1.a = 1
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  
 
 
je tente nu nouvel essai  
 
 
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 
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 ???
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
 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 
Marsh Posté le 16-04-2003 à 20:15:09
ben les deux je dirais..  
 
 
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  )
 ) 
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, ' ' "
" 
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 
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 
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 ?
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  
 
Marsh Posté le 16-04-2003 à 20:41:06
| wouatouwouatou a écrit : euh.. merci ... ca a lair de marcher..  | 
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  
 
Marsh Posté le 16-04-2003 à 20:43:00
merci..  
 
juste ce que je cherchais.. lol 
 
a propos de mon second post 
Marsh Posté le 16-04-2003 à 20:47:18
Reply
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...
Message édité par wouatouwouatou le 16-04-2003 à 19:59:25