sqlite3 JOIN,GROUP_CONCAT 使用不同的自定义分隔符

标签 sql sqlite group-concat

给定一个“事件”表,其中每个事件可能与零个或多个“演讲者”和零个或多个“术语”相关联,这些记录通过连接表与事件相关联,我需要生成一个包含所有事件的表每行中有一列代表与每个事件关联的“speaker_names”和“term_names”列表。

但是,当我运行查询时,我在 speaker_names 和 term_names 值中有重复,因为连接表为每个演讲者和事件术语的每个关联生成一行:

1|Soccer|Bobby|Ball
2|Baseball|Bobby - Bobby - Bobby|Ball - Bat - Helmets
3|Football|Bobby - Jane - Bobby - Jane|Ball - Ball - Helmets - Helmets

group_concat 聚合函数可以使用“distinct”,它可以消除重复,但遗憾的是它不支持我真正需要的自定义分隔符。我留下了这些结果:

1|Soccer|Bobby|Ball
2|Baseball|Bobby|Ball,Bat,Helmets
3|Football|Bobby,Jane|Ball,Helmets

我的问题是:有没有一种方法可以形成查询或更改数据结构以获得我想要的结果?

请记住,这是我需要的 sqlite3 查询,我无法添加自定义 C 聚合函数,因为这是针对 Android 部署的。

我创建了一个要点,可以让您轻松测试可能的解决方案:https://gist.github.com/4072840

最佳答案

相互独立地查找说话人/术语名称:

SELECT _id,
       name,
       (SELECT GROUP_CONCAT(name, ';')
        FROM events_speakers
        JOIN speakers
          ON events_speakers.speaker_id = speakers._id
        WHERE events_speakers.event_id = events._id
       ) AS speaker_names,
       (SELECT GROUP_CONCAT(name, ';')
        FROM events_terms
        JOIN terms
          ON events_terms.term_id = terms._id
        WHERE events_terms.event_id = events._id
       ) AS term_names
FROM events

关于sqlite3 JOIN,GROUP_CONCAT 使用不同的自定义分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382856/

相关文章:

sql - SSIS - 将 nchar 空字符串转换为 int 时出现表达式计算错误

php - 使用 php 准备好的语句将图像(blob)插入 mysql 数据库

sqlite - SQLite.NET安装程序项目

MySQL - 嵌套结果连接

mysql - 查找重复记录并在连接字符串中给出结果

mysql - SQL计算另一个表中的行并加入

sql - 正则表达式查询

vb6 - 需要 SQLite3 用于可移植程序 vb6

python - SQLite 不在使用之间保存数据

mysql - IN mysql 函数 group_concat 动态更改分隔符