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

如何编写SQL查询实现多表关联聚合,展示文章、作者与关键词?

SQL查询:关联多表并拼接作者与关键词

现有表结构

1. Author表

AuthorIDFirstNameLastName
1AlexPopov
2SergSmit
3JohnPaulse

2. NameStatie表

NameStatieIDNameStatieURLStatie
1POPULATION OF TRNA-DERIVED/item001
2AGENT-BASED SIMULATION MODEL/item002
3CHAGAS' DISEASE DIAGNOSIS:/item003

3. KeyWord表

KeyWordIDNameKeyWord
1VIRTUAL LEARNING ENVIRONMENT
2EDUCATIONAL OBJECTIVES
3ACADEMIC PROGRESS EVALUATION

4. Statie表(关联表)

StatieIDNameStatieIDAuthorID
111
213
322

5. NameStatieAndKeyWord表(中间表,避免冗余)

NameStatieAndKeyWordIDNameStatieIDKeyWordID
111
213
322

需求

需要编写SQL查询,得到如下结果:

NameStatieKeyWordsAuthor
POPULATION OF TRNA-DERIVEDVIRTUAL LEARNING ENVIRONMENT, ACADEMIC PROGRESS EVALUATIONAlex Popov, John Paulse

已有可拼接作者的SQL语句,但无法加入关键词拼接,需要完善查询。

解决方案

通过关联中间表NameStatieAndKeyWord和KeyWord表,用GROUP_CONCAT拼接关键词,同时保留原有作者拼接逻辑。使用LEFT JOIN避免丢失无关键词/作者的条目,最终按NameStatieID分组:

SELECT 
    ns.NameStatie,
    GROUP_CONCAT(DISTINCT kw.NameKeyWord ORDER BY kw.NameKeyWord SEPARATOR ', ') AS KeyWords,
    GROUP_CONCAT(DISTINCT a.LastName || ' ' || a.FirstName ORDER BY a.LastName SEPARATOR ', ') AS Author
FROM NameStatie ns
LEFT JOIN Statie s ON ns.NameStatieID = s.NameStatieID
LEFT JOIN Author a ON s.AuthorID = a.AuthorID
LEFT JOIN NameStatieAndKeyWord nskw ON ns.NameStatieID = nskw.NameStatieID
LEFT JOIN KeyWord kw ON nskw.KeyWordID = kw.KeyWordID
GROUP BY ns.NameStatieID, ns.NameStatie;

说明

  1. LEFT JOIN确保所有NameStatie条目都能被查询到,即使无关联的作者或关键词;
  2. DISTINCT避免多表关联导致的重复内容;
  3. ORDER BY让拼接的作者、关键词按顺序排列,结果更规整;
  4. 分组时同时指定NameStatieID和NameStatie,避免同名内容导致分组错误。

内容的提问来源于stack exchange,提问作者Кузнецов Сергей Владимирович

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:51