我有一张人表:id,person_name
我有一个标签表:id,tag_name
有一个用于连接人员和标签的标签的联结表:id、person_id、tag_id
我有一个查询可以根据不同的搜索条件获取一组人,因此它是动态构建的,我想做的是在该查询中 - 对于每个人 - 我希望能够获取所有标签与该人相关的名称。我想抓取所有相关的标签并将它们粘贴到每个人行的一列中(最好作为数组或对象)。在这样的行中循环时,能够将一组内容作为一列返回的一般模式是什么。我无法弄清楚要搜索什么以在线找到通用答案。我正在使用postgres。
正如其他人所提到的,您的目标是对数据进行非规范化,这不是关系数据库系统的常见用例,但它肯定是可以实现的。因此,如果您真的想实现这一点,那么您想要谷歌的是类似于“ PostgreSQL 连接多行”的内容。目标通常是创建一个逗号分隔值列表(CSV或类似结构的东西)。
这样做实际上让我得到了这个StackOverflow上关于在 PostgreSQL中使用
string_agg()
函数的答案。作为历史参考,这里是前面提到的 StackOverflow 答案中 Erwin 的示例,利用
string_agg()
将多个值压缩到表中每行Actor
的单个字段中:Movie
Movies
在你的情况下,你想要
JOIN
你people
的tags
桌子(通过你的连接表)。从上面的示例movie
中将等效于您的person_name
字段,并且actor
将等效于您的tag_name
字段。您正在寻找可能与此类似的查询: