是否有更有效的方法来执行一对多关系而不是返回每行中的“one”值?

时间:2016-09-16 03:17:33

标签: database postgresql join database-design one-to-many

我有一个非常基本的一对多关系。存在“节点”,并且每个节点涉及多个“选项”。我正在做一个相当简单的连接,我的结果是这样的:

           content        | optionid |     content      
--------------------------+----------+------------------
 This is the node content |        1 | This is option 1
 This is the node content |        2 | This is option 2

但是,因为它是一对多,所以每一行都有相同的节点内容:This is the node content。当我只需要一次时,每行返回相同的值似乎是多余的。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

jsonb_object_agg aggregate function 对此来说似乎是一个不错的选择。

SELECT
    n.content,
    jsonb_object_agg(o.optionid, o.content)
FROM node n
JOIN option o ON (
    -- what ever are the conditions
)
GROUP BY n.content;

答案 1 :(得分:0)

嗯,这就是关系数据库的工作方式 - 您必须做出妥协。

如果您认为此查询在应用程序服务器和数据库之间生成过大的数据流,则可以将其拆分为两个查询。单独加载content,然后加载options以避免冗余。这也可以带来性能优势(更少的内存,没有JOIN等)。

另一方面,由于运行单独的查询,这会产生延迟。特别是在循环查询中,这可能会慢得多。所以,这完全取决于妥协。