首先,对这个问题的措辞道歉,因为它对我来说似乎不太合适。
我有三个表:t1
,t2
和t3
。它们共享一个外键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
答案 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;