我想创建一个连接多个表的报表查询。这些表之间有一个共享字段(方法)。我有一个包含两个外键列的表。
主要表
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个表(并将外键列添加到主表),则查询似乎变得难以管理。
谢谢, 中号
答案 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 JOIN
和COALESCE
来查找非空匹配。
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