2010-07-06 79 views
2

尝试在子查询FROM子句中使用来自外部查询的参数。有条件的左外连接的Mysql子查询

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

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

试图写下面的查询:

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

预期输出:

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

然而,它失败,出现错误:

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

我在做什么错这里?

回答

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

有什么理由不使用普通的老左的连接是这样的:

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

我已经更新的问题,请注意固定查询以更好地解释问题。我想做一个“有条件的左外连接” – 2010-07-06 13:15:29

0
SELECT * tbl1 UNION select * from tbl2; 

会产生相同的结果

+1

不会,因为要求是从左边的行,如果存在这样的匹配数据。但是没有来自右侧的没有与左侧匹配的线。顺便说一下,这个问题在2年前非常有趣。今天,它是一个NoSQL世界。技术肯定会快速移动... – 2012-06-23 21:52:18