MySQL LEFT JOIN始终从多个表

时间:2015-12-16 15:59:20

标签: mysql join

首先,对这个问题的措辞道歉,因为它对我来说似乎不太合适。

我有三个表:t1t2t3。它们共享一个外键id,这也是它们的主键。我想做这样的事情:

SELECT col1, col2 FROM t1 LEFT JOIN (t2, t3) ON (t1.id=t2.id AND t1.id=t3.id);

当然,当t1没有匹配的行时,查询返回空,即使其他表也没有。我无法预测哪个表可能包含数据,也可能不包含数据,但我仍然希望返回值(对于非匹配表,使用NULL s)。我该怎么办?

我想通过LEFT JOIN的定义,这是预期的行为。所以,也许是我应该使用的另一种JOIN!

修改

t1

id    col1    col2
------------------

<EMPTY>


t2
-----
id    col3    col4
------------------
1     foo     bar
2     faa     boo
3     faz     baz    



t3
-----
id    col5    col6
------------------
3     hoo     har
4     haa     boo

当我这样做时:

    SELECT * FROM t1 <WHATEVER JOIN> (t2, t3) ON (t1.id=t2.id AND t1.id=t3.id) WHERE id = 3;

我希望看到类似的内容:

id: NULL
col1: NULL
col2: NULL
col3: faz
col4: baz
col5: hoo
col6: har

1 个答案:

答案 0 :(得分:0)

对于您提供的具体示例,此查询将为您提供正确的结果:

SELECT t1.id as id,
       t1.col1 as col1,
       t1.col2 as col2, 
       b.col3 as col3, 
       b.col4 as col4,
       b.col5 as col5,
       b.col6 as col6
FROM t1 
RIGHT JOIN (
SELECT t2.id as id, 
       t2.col3 as col3, 
       t2.col4 as col4,
       t3.col5 as col5,
       t3.col6 as col6
FROM t2 
JOIN t3 ON t2.id = t3.id) B
on t1.id = b.id;