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