You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL一对多关联查询:将查询结果拆分至不同列展示

解决思路:用条件聚合避免重复关联表

嘿,我懂你不想反复关联同一张表的想法——重复关联不仅代码看着啰嗦,还可能拖慢查询速度。咱们换个思路,用条件聚合的方式来实现你要的行列转换,只需要关联两次表就能搞定,代码更简洁高效。

具体SQL实现

SELECT
    b.ID AS `BOOK ID`,
    b.Title,
    MAX(CASE WHEN bc.Type = 'Author' THEN c.Title END) AS Author,
    MAX(CASE WHEN bc.Type = 'Editor' THEN c.Title END) AS Editor,
    MAX(CASE WHEN bc.Type = 'Publisher' THEN c.Title END) AS Publisher
FROM Book b
LEFT JOIN Book_Collaborators bc ON b.ID = bc.BookID
LEFT JOIN Collaborators c ON bc.COLLAB_ID = c.ID
GROUP BY b.ID, b.Title

代码解释

  • 先通过LEFT JOIN关联Book和Book_Collaborators,这样哪怕某本图书没有任何协作方记录,也能被保留在结果里
  • 再关联一次Collaborators,拿到每个协作方的名称
  • 用CASE WHEN判断协作方类型,只把对应类型的名称留下来,其他类型的位置返回NULL
  • 最后按图书的ID和Title分组,用MAX函数把每组里的NULL过滤掉,就能得到每个类型对应的唯一协作方名称(如果某类型没有记录,对应列会显示NULL,完全符合你的需求)

这种写法相比你之前多次关联表的方式,代码更紧凑,维护起来也更方便,而且查询性能通常也更好哦。

内容的提问来源于stack exchange,提问作者Deadfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:52:40