多个连接在查询中填充单个列。

问题描述:

我想创建一个连接多个表的报表查询。这些表格之间有一个共享字段(方法)。我有一个有两个外键列的表。多个连接在查询中填充单个列。

主表

Book_id fooid barid 
1  1  null 
2  null  1 
3  4  null 

富表

foo_id method 
1  this  
4  that  

吧台

bar_id method 
1  where 
2  why  

查询结果

Book_id method 
1  this 
2  where 
3  that 

我意识到,如果我空可以用一个来得到想要的结果。这是最好的方法吗?如果我最终加入3个或4个表(并将外键列添加到主表),查询似乎很难管理。

感谢, 中号

+1

如果“fooid”和“barid”都填入了,结果如何? – Barmar

+0

ifnull或等价路线是要走的路。 4表仍然是一个很小的查询,所以不用担心:) –

+1

COALESCE对于可伸缩性似乎更简单 – Strawberry

您可以使用UNION

SELECT m.book_id, f.method 
FROM Foo AS f 
JOIN Main AS m ON f.foo_id = m.fooid 
UNION 
SELECT m.book_id, b.method 
FROM Bar as b 
JOIN Main AS m ON b.bar_id = m.barid 

如果你有多个表,只需添加更多的子查询到工会。

您也可以使用LEFT JOINCOALESCE来查找非空匹配。

SELECT m.book_id, COALESCE(f.method, b.method) AS method 
FROM Main as m 
LEFT JOIN Foo AS f ON f.foo_id = m.fooid 
LEFT JOIN Bar AS b ON b.bar_id = m.barid 

随着越来越多的表,添加更多LEFT JOIN行,并添加相应的字段为COALESCE

select book_id 
    , coalesce(foo.method, bar.method, 'value if null') as method 
-- -------------------------------------^^^^^^^^^^^^^^^ 
-- What should go here if both fooid and barid are null? 
from main 
    left join foo on main.book_id = foo.foo_id 
    left join bar on main.book_id = bar.bar_id