我想创建一个连接多个表的报告查询。这些表之间有一个共享字段(方法)。我有一个包含两个外键列的表。
主表
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 个表(并向主表添加外键列),查询似乎会变得难以管理。
谢谢, 中号
最佳答案
您可以使用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
。
关于mysql - 让多个联接填充查询中的单个列。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816381/