【发布时间】:2020-11-19 13:47:02
【问题描述】:
假设我有以下表格,这些表格将模型标签附加到文章:
articles (article_id, title, created_at, content)
tags (tag_id, tagname)
articles_tags (article_fk, tag_fk)
检索n 最新文章及其所有附加标签名的惯用方法是什么?这似乎是一个标准问题,但我是 SQL 新手,不知道如何优雅地解决这个问题。
从应用程序的角度来看,我想编写一个函数,它返回[title, content, [tags]] 形式的记录列表,即,附加到文章的所有标签都将包含在可变长度列表中。 SQL 关系没有那么灵活。到目前为止,我只能考虑一个查询来连接为每个文章/标签组合返回一个新行的表,然后我需要以编程方式将其压缩为上述形式。
另外,我可以想到一个解决方案,我发出两个查询:首先,对于文章;第二,链接表和标签表上的inner join。然后,在应用程序中,我可以过滤每个article_id 的结果集以获取给定文章的所有标签吗?后者似乎是一个相当冗长和低效的解决方案。
我错过了什么吗?是否有规范的方法来制定单个查询?还是单个查询加上较小的后处理?
除了简单的 SQL 问题,在 Opaleye DSL 中对应的查询会是什么样子?也就是说,能不能翻译?
【问题讨论】:
-
请用您正在运行的数据库标记您的问题:mysql、oracle、postgresql...?
标签: sql postgresql join subquery opaleye