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

SQLite多表关联查询:如何拼接关联标签、主题字段得到指定结果表

SQLite查询语句实现方案

核心使用SQLite内置的GROUP_CONCAT()聚合函数实现多值拼接,为避免多表关联产生笛卡尔积导致拼接结果重复,采用先分维度聚合再关联基础表的逻辑编写:

SELECT
  b.group_id,
  b.group_name,
  IFNULL(t.tags, '') AS tags,
  IFNULL(th.themes, '') AS themes
FROM
  base_table b
LEFT JOIN (
  -- 按组聚合拼接标签
  SELECT
    tm.group_id,
    GROUP_CONCAT(t.tag_name, ', ') AS tags
  FROM
    tags_mapping tm
  INNER JOIN tags_table t ON tm.tag_id = t.tag_id
  GROUP BY tm.group_id
) t ON b.group_id = t.group_id
LEFT JOIN (
  -- 按组聚合拼接主题
  SELECT
    thm.group_id,
    GROUP_CONCAT(th.theme_name, ', ') AS themes
  FROM
    theme_mapping thm
  INNER JOIN theme_table th ON thm.theme_id = th.theme_id
  GROUP BY thm.group_id
) th ON b.group_id = th.group_id
ORDER BY b.group_id ASC;

补充说明

  • 使用LEFT JOIN保证基础表中无关联标签/主题的分组(如示例中的group_id=3)可正常返回
  • 通过IFNULL()将无关联数据的字段值转换为空字符串,匹配需求的输出格式
  • GROUP_CONCAT第二个参数指定分隔符为, ,和示例输出格式完全一致
  • 如果你使用SQLite 3.30.0及以上版本,可在GROUP_CONCAT中添加排序规则,例如需要按标签ID倒序拼接可写为GROUP_CONCAT(t.tag_name, ', ') ORDER BY t.tag_id DESC
  • 如果你的实际表名保留了空格(例如Base Table),请将语句中对应的表名用反引号或双引号包裹即可正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:42:01