首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL中查询多对一关系的正确方法?

在PostgreSQL中查询多对一关系的正确方法?
EN

Stack Overflow用户
提问于 2015-09-02 14:40:46
回答 1查看 299关注 0票数 0

我目前有三个表:公式、视频和文章。公式表中的行与视频和文章有多对一的关系。

我的API需要以以下形式输出这种关系:

代码语言:javascript
复制
formulas: {
  // some number of formulas
}
videos: {
  // videos belonging to the formulas
}
articles: {
  // articles belonging to the formulas
}

我想出了两种不同的方法来进行查询,以获得我需要的信息,但我担心,由于我对SQL缺乏经验,这两种方法都不是好方法。

方法一种方法在我看来是很糟糕的实践,但它是在一个查询中完成的。但是,它还要求我对结果进行一些格式化:

代码语言:javascript
复制
SELECT formulas.formula_id,
       formulas.formula,
       formulas.name,
       array_agg(videos.link) AS video_links,
       array_agg(videos.name) AS video_names,
       array_agg(articles.link) AS article_links,
       array_agg(articles.name) AS article_names
FROM formulas LIMIT 200
LEFT JOIN videos on videos.formula_id=formulas.formula_id
LEFT JOIN articles on articles.formula_id=formulas.formula_id
GROUP BY formulas.formula_id;

第二种方法似乎更正常一些。它需要多个查询,这并不是世界末日,但据我所读,最好只在一个查询中完成:

代码语言:javascript
复制
SELECT * FROM formulas LIMIT 200;

SELECT * FROM videos WHERE formula_id IN (SELECT formula_id FROM formulas LIMIT 200);

SELECT * FROM articles WHERE formula_id IN (SELECT formula_id FROM formulas LIMIT 200);

方法一对我来说很残忍,而方法二似乎分散成太多的查询。

有人能展示一种更好/更正确的方式来查询多个多对一的关系吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-14 17:58:41

这完全取决于你想对结果做些什么。没有一种“最好”的方法来做这样的事情。如果是报告,我就去找解决方案一。如果这是针对交互式GUI,用户首先选择一个公式,然后需要显示相关行,那么第二种方法可能更好。或者组合:一个查询获得公式,另一个查询得到所有相关的vidoes和文章。或者完全不同的东西。除非你告诉我们你需要对结果做什么,否则这几乎是不可能回答的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32356208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档