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
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
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