如何在多个表上使用Postgres string_agg函数?

时间:2018-07-08 19:29:48

标签: postgresql

因此,我有3个表可供选择,以创建如下所示的选择:

enter image description here

用于获取此选择的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。

1 个答案:

答案 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