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

时间:2015-11-19 23:37:04

标签: mysql join

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

主要表

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

Foo表

foo_id method 
1        this      
4        that    

酒吧表

bar_id method 
1        where
2        why     

查询结果

Book_id method 
1        this
2        where
3        that 

我意识到我可以使用if null来获得所需的结果。这是最好的方法吗?如果我最终加入3或4个表(并将外键列添加到主表),则查询似乎变得难以管理。

谢谢, 中号

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

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