mysql - 让多个联接填充查询中的单个列。

标签 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 个表(并向主表添加外键列),查询似乎会变得难以管理。

谢谢, 中号

最佳答案

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

关于mysql - 让多个联接填充查询中的单个列。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816381/

相关文章:

c# - 如何在 Linq 中组合多个相同或不同长度的列表?

Hibernate Criteria 连接两个表

MYSQL View ?连接两个表

php - 在所有请求都成功提交之前数据库没有响应 : MySQL

mysql - sql 查询,在 where 类中进行行比较

php - 为什么 GROUP_CONCAT + DISTINCT 在某些服务器上会触发内存不足(需要 8388580 字节)?

MySQL - 返回一个表中与另一个(间接链接)表中的最小日期相对应的行

MySQL 查找其中包含全文索引列的所有表

Mysql左连接表不在日期之间

postgresql - 如何在 PostgreSql 中连接 2 个表而不重复值