当前位置: 首页 > 面试题库 >

在postgresql的“ uery”中联接两个单独的查询(可能或不可能)

漆雕育
2023-03-14
问题内容

我在返回具有唯一字段的postgresql查询中的前X条记录时遇到了很大的帮助,现在遇到了我遇到的问题,并尝试尽我所能进行优化(尽管我通常不喜欢提前加载优化,这是一种独特的情况)。

想象一个应用程序中的三个实体:

User
Post
Instance # An instance is just a reference to a post

字段看起来像这样:

User
  id
Post
  id
  user_id
  name
Instance
  id
  user_id
  post_id
  helped_by_user_id

要求

返回10个实例,其中:

  1. user_id不等于3
  2. post_id是唯一的
  3. 没有其他具有该post_id和helped_by_user_id为3的实例

编辑:

我已经在http://sqlfiddle.com/#!10/7a324/1/0上为此创建了一个SQLFiddle

作为记录,我使用的是Ruby 1.9.3,Rails 3.2.13和Postgresql(Heroku)


问题答案:

只是为了更容易阅读,将100%的功劳归功于@CraigRinger,最适合我的最终解决方案是:

SELECT DISTINCT ON (post_id) *
FROM instances i
WHERE i.user_id <> 3
AND i.helped_by_user_id IS NULL
AND NOT EXISTS (
  SELECT 1
  FROM instances ii
  WHERE ii.post_id = i.post_id
  AND ii.helped_by_user_id = 3
)
ORDER BY i.post_id
LIMIT 10;


 类似资料:
  • 问题内容: 我对子查询的性能/连接另一个表有一些疑问 这是我的SQL,现在这个东西可以运行大约一百万次或更多。我的问题是什么会更快? 如果我更改为() 或者 如果我将’HelpTable’添加到中并在中进行联接? edit1 好吧,此脚本仅运行与r个人一样多的人。 我的程序有2个模块,一个模块填充,另一个模块传输数据。该程序确实将2个数据库合并在一起,因此有时会使用相同的Key。 现在,我正在研究

  • 问题内容: 我想写一些类似的东西: 这有效: 这有效: 像这样的作品: 但是我需要在Meeting_time上做一个大于查询的事情,所以我需要将它写为一个字符串,我认为呢? 但是,两个sql查询在一起都会产生以下错误: 我觉得我好近……我在这里想念什么? 问题答案: 当不清楚该列来自哪个表时,会出现此消息。这应该工作:

  • 问题内容: 第一次问有关Stack Overflow的问题…令人惊讶的资源,但是有一点让我作为SQL的新手感到困惑。 我有三个表,我想获取与鲍勃的学生相关的所有导师的姓名。 表1:老师 表2:学生 表3:MENTOR_RELATIONSHIPS 表4:导师 我想查询一下鲍勃学生的所有导师。因此,所有学生的导师 在这种情况下,肖恩就是结果。 我知道这与Joins有关,还是可以使用常规查询找到它??

  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。

  • 问题内容: 我想将两个选择查询与结合在一起。 如何使用第二个中的第一个结果? 问题答案: 使用 CTE 可以在多个查询中重用子查询的结果。 为此,您需要PostgreSQL 8.4+: 您最有可能想要而不是。不排除重复项,这样可以更快。

  • 是否可以从2个可能的表中获取实体的字段? 例如: 父类中的字段需要根据某些条件从表a或表b中提取! 任何想法都将不胜感激! 澄清:如果父级实际上指向B实例,我不想获取B实例!表每类继承只在A的表中查找,因为我们在父类中指定了his字段的类型!? 你有其他想法吗?