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

MySQL/MariaDB中按artist_IDs匹配关联表获取专辑全部艺人信息

问题根因

  • 关联查询仅返回单条数据的核心原因是你加了GROUP BY albums.ID逻辑:按专辑ID分组后,每个专辑只会保留一行结果,自然只会展示一个匹配到的艺人,不符合返回全部对应艺人的需求
  • 直接用LOCATE/LIKE匹配ID存在逻辑漏洞:比如存在ID为a1和a12的两个艺人时,若专辑artist_IDs字段包含a12,匹配a1时也会命中,会出现错误关联

实现方案

MySQL、MariaDB原生提供FIND_IN_SET函数,专门用于逗号分隔字符串的精确匹配,可以完美适配你的场景。

方案1:返回每张专辑对应N行、每行对应1个艺人的明细结果(符合你预期返回两条数据的需求)

SELECT 
  albums.ID, 
  albums.name, 
  albums.imageID,
  artists.name as artistsname
FROM albums 
INNER JOIN artists 
ON FIND_IN_SET(artists.ID, albums.artist_IDs) > 0

方案2:返回每张专辑对应1行、所有艺人信息合并展示的聚合结果

如果需要单条记录展示一张专辑的全部艺人,可以配合GROUP_CONCAT做聚合:

SELECT 
  albums.ID, 
  albums.name, 
  albums.imageID,
  GROUP_CONCAT(artists.name SEPARATOR '、') as artistsname
FROM albums 
INNER JOIN artists 
ON FIND_IN_SET(artists.ID, albums.artist_IDs) > 0
GROUP BY albums.ID, albums.name, albums.imageID

注意事项

用逗号分隔存储关联ID的设计违反数据库第一范式,数据量较大时关联查询性能会明显下降,建议后续改造为专辑-艺人中间关联表存储对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04