因此,我有3个表可供选择,以创建如下所示的选择:
用于获取此选择的SQL语句(来自3个表):
SELECT games.title as title, taggings.taggable_id as game_id, tags.name as category, tags.id
FROM taggings, tags, games
WHERE taggings.tag_id = tags.id and games.id = taggings.taggable_id
我要做的是使选择合并所有类别字段。因此,superorbit.io只有一行,其中包含一个类别字段,其中包含“ 2d Shooter,Asteroids,Free For All等”。非常像这个人想做的事情: How to concatenate strings of a string field in a PostgreSQL 'group by' query?
我正在尝试做同样的事情,但是运气不好。我认为我的案件与他的案件之间的主要区别在于,我在这里使用3张桌子(标签,标签和游戏)。这是我到目前为止的查询(使用string_agg函数),但是它似乎并没有像您期望的那样将类别连接在一起。实际上,结果看起来与第一个代码几乎相同。
SELECT games.title as title, taggings.taggable_id as game_id, string_agg(tags.name, ', ') , tags.id
FROM taggings, tags, games
WHERE taggings.tag_id = tags.id and games.id = taggings.taggable_id GROUP BY tags.name,games.title,taggings.taggable_id,tags.id
我在做什么错?我正在使用Postgres 9.6.7。
答案 0 :(得分:0)
感谢Sami,通过以下查询可以得到我想要的结果:
SELECT games.title as title, taggings.taggable_id as game_id, string_agg(tags.name, ', ')
FROM taggings, tags, games
WHERE taggings.tag_id = tags.id and games.id = taggings.taggable_id GROUP BY games.title,taggings.taggable_id