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

如何通过JOIN语句将多查询结果合并到单个字段/单元格

解决同一用户借阅书籍名称合并为单个字段的SQL方案

你需要用**GROUP_CONCAT()**函数来实现同一用户的书籍名称合并,这是MySQL(Drupal默认数据库)中专门用来将分组内的字符串拼接成单个字段的函数。结合你的表结构,完整的SQL查询语句如下:

SELECT
  p.name,
  p.ID,
  p.age,
  GROUP_CONCAT(b.title SEPARATOR ', ') AS borrowed_books
FROM
  People p
INNER JOIN `borrow records` br ON p.ID = br.person_id
INNER JOIN Books b ON br.book_id = b.id
WHERE
  p.age >= 18
GROUP BY
  p.ID, p.name, p.age;

关键部分解释:

  • GROUP_CONCAT(b.title SEPARATOR ', '):将每个用户分组内的书籍标题用, 分隔拼接成一个字符串,完全匹配你需要的格式。
  • GROUP BY p.ID, p.name, p.age:必须按用户的唯一标识(ID)及其他需展示的字段分组,这样GROUP_CONCAT才会针对每个用户单独拼接书籍列表。
  • 表名转义:因为borrow records表名包含空格,所以用反引号`括起来避免语法错误。

可选调整:

如果需要包含18岁以上但从未借过书的用户,把INNER JOIN改成LEFT JOIN,此时这些用户的borrowed_books字段会显示为NULL:

SELECT
  p.name,
  p.ID,
  p.age,
  GROUP_CONCAT(b.title SEPARATOR ', ') AS borrowed_books
FROM
  People p
LEFT JOIN `borrow records` br ON p.ID = br.person_id
LEFT JOIN Books b ON br.book_id = b.id
WHERE
  p.age >= 18
GROUP BY
  p.ID, p.name, p.age;

针对Drupal实际场景的适配:

你提到实际是要获取特定节点的分类名称,这里给你一个参考示例(假设节点类型为article,分类字段的词汇ID为5):

SELECT
  n.title AS node_title,
  n.nid AS node_id,
  GROUP_CONCAT(td.name SEPARATOR ', ') AS category_names
FROM
  node n
INNER JOIN taxonomy_index ti ON n.nid = ti.nid
INNER JOIN taxonomy_term_data td ON ti.tid = td.tid
WHERE
  n.type = 'article'
  AND td.vid = 5 -- 指定词汇ID
GROUP BY
  n.nid, n.title;

这个查询会把每个文章节点对应的分类名称合并成单个字段,逻辑和图书借阅场景完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:06