2010-07-06 8 views
2

Essayant d'utiliser le paramètre de la requête externe dans la clause FROM de la sous-requête.Sous-requête Mysql avec jointure externe gauche conditionnelle

tbl1: 
| id | val1 | str1 | 
| 1 | 12 | sbc | 
| 2 | 22 | sds | 

tbl2: 
| id | val1 | str1 | 
| 1 | 1 | cp | 

Essayer d'écrire la requête suivante:

select * from 
    tbl1 t, (select * from tbl2 where t.id = tbl2.id and tbl2.val1 = 1) tb12; 

Sortie prévue:

| id | val1 | str1 | id | val1 | str1 | 
| 1 | 12 | sbc | 1 | 1 | cp | 
| 2 | 22 | sds | null | null | null | 

Pourtant, il échoue avec l'erreur:

/* SQL Error (1054): Unknown column 't.id' in 'where clause' */ 

Qu'est-ce que je fais mal ici?

Répondre

2
SELECT * 
FROM tbl1 t 
LEFT JOIN 
     tbl2 t2 
ON  t2.id = t.id 
     AND t2.val1 = 1 
2

Y at-il raison de ne pas utiliser de vieux gauche plaine rejoindre comme ceci:

select * from tbl1 t1 left join tbl2 t2 on t1.id = t2.id; 
+0

J'ai mis à jour la question, s'il vous plaît noter la requête fixe pour mieux expliquer le problème. Je voudrais faire une "jointure externe gauche conditionnelle" –

0
SELECT * tbl1 UNION select * from tbl2; 

produira le même résultat

+1

Non ce ne sera pas parce que les exigences sont les lignes de la gauche avec les données de correspondance de la droite, si tel existe. Mais pas les lignes de la droite qui ne correspondent pas à la gauche. btw, note de côté: Cette question était si intéressante il y a 2 ans. Aujourd'hui c'est un monde NoSQL. La technologie se déplace bien vite ... –

Questions connexes