[MySQL] - Requete

Résolu
bacchuss Messages postés 1162 Date d'inscription   Statut Membre Dernière intervention   -  
crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour

voila mon probleme SQL (MySQL):


j'ai 2 tables (j'ai fait tres court, y a plein d'autres tables et champs)
       machin           truc
+-----+-----+-----+  +---+-----+
|  A  |  B  |  c  |  | D |  E  |
+-----+-----+-----+  +---+-----+
|toto |  1  |  2  |  | 1 | 4.3 |
|titi |  1  |NULL |  | 2 | 5.1 |
|     |     |     |  |   |     |


resultat desire:
+-----+-----+-----+  
|toto | 4.3 | 5.1 |  
+-----+-----+-----+  
|titi | 4.3 |     | 
+-----+-----+-----+ 


SELECT A, t1.E, t2.E
FROM machin, truc t1, truc t2
WHERE machin.B = t1.D
AND machin.C = t2.D

pour toto, je sais bien faire.
Par contre, pour titi, je me prends la tete

Quelqu'un sait ?

Merci

4 réponses

crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   507
 
Salut,
les jointures ignorent les NULL. Il faut regarder du coté de LEFT JOIN.
select A,t1.E,t2.E from machin
    left join truc as t1 on B=t1.D
    left join truc as t2 on C=t2.D

(Valider avec la version 4.0.23a de mysql)
Je sais pas si on peut imbriquer les 'left join à l'infini. Par contre ça va mettre
à genou ton serveur mysql si les tables machin et truc sont conséquentes.
Faut bien penser à mettre 'D' comme clé primaire unique de 'truc' ou comme
index.
A+, crabs
0
bacchuss Messages postés 1162 Date d'inscription   Statut Membre Dernière intervention   190
 
arf, j'essayais en mettant des + comme en oracle moi

merci je vais essayer ca.
Par contre mes tables ne sont pas grosses (1000 lignes env) donc ca devrait passer pour mon serveur
0
bacchuss Messages postés 1162 Date d'inscription   Statut Membre Dernière intervention   190
 
bon apparemment ca marche.
Par contre, si je veux pousser un peu plus loin, c'est a dire mettre un filtre sur mon resultat, il ne le prend pas en compte

select A,t1.E,t2.E from machin
    left join truc as t1 on B=t1.D
    left join truc as t2 on C=t2.D
where A = "titi"


Je pensais que ca ne me retournerai qu'une ligne (celle avec titi), et bien non ... il me retourne toutes les lignes

:(
0
crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   507
 
Salut,
Etonnant, sur mon serveur ça fonctionne - les clauses de restriction.
Par contre je n'ai pas de clé de définie ni sur la table machin et sur truc et les
tables sont MyISAM (rappel version: 4.0.23a).
A+, crabs
0