Postgresql Postgres如何将2个单独的select查询合并为1个

Postgresql Postgres如何将2个单独的select查询合并为1个,postgresql,postgresql-9.3,postgresql-9.4,Postgresql,Postgresql 9.3,Postgresql 9.4,我使用的是Postgres9.4,我想将两个单独的查询合并到一个语句中。我一直在看这篇文章,但仍然不知道如何使用它。这两个查询独立工作。给你 # 1: select * from votes v where v.user_id=32 and v.stream_id=130; #2: select city,state,post,created_on,votes,id as Voted from streams where latitudes >=28.0363 AND 28.9059

我使用的是Postgres9.4,我想将两个单独的查询合并到一个语句中。我一直在看这篇文章,但仍然不知道如何使用它。这两个查询独立工作。给你

# 1:  select * from votes v where v.user_id=32 and v.stream_id=130;

#2: select city,state,post,created_on,votes,id as Voted from streams 
where latitudes >=28.0363 AND 28.9059>= latitudes  order by votes desc limit 5 ;

我希望查询#2被限制为5,但是我不希望查询#1被包括在该限制中,这样最多可以返回6行。这就像一个建议引擎,其中query#1有一个主线程,query#2最多给出5个不同的建议,但它们显然位于不同的表中。

由于没有模型和数据,我用这两个模型的假人模拟了这个问题

我还必须指出,这不完全是我的作品,而是我前几天遇到的对它的改编。也许这也是一种方法

那么,发生了什么事?Column
id
代表您的表和子查询共有的任何列<代码>投票.user_id我在一个子查询中选择了某物,在另一个子查询中选择了
streams.foo

由于您要求最多有6行,我使用了limit子句两次。首先在子查询中,以防表中有大量您不想选择的行,然后在外部查询中,再次限制行数。在这两个限制上稍微拨动一下,然后切换
WHERE foo
WHERE NOT foo
,你就会明白为什么了


在第一个子查询中,我添加了一个排序列,就像在该答案中那样。这是因为我猜您希望第一个子查询的结果也始终位于顶部。

您能否简单解释一下这两个查询之间的关系。(举个例子就好了)查询不会返回一致的结果集模式。如果他们这样做了,你可以用工会。你想加入我们的行列吗?那太好了谢谢很多人都试过了
CREATE TABLE votes
(
   id smallint
   , user_id smallint
);

CREATE TABLE streams
(
   id smallint
   , foo boolean
);

INSERT INTO votes
VALUES (1, 42), (2, 32), (3, 17), (4, 37), (5, 73), (6, 69), (7, 21), (8, 18), (9, 11), (10, 15), (11, 28);

INSERT INTO streams
VALUES (1, true), (2, true), (3, true), (4, true), (5, true), (6, true), (7, false), (8, false), (9, false), (10, false), (11, false);

SELECT
  id
FROM
  (SELECT id, 1 AS sort FROM votes WHERE user_id = 32) AS query_1
  FULL JOIN (SELECT id FROM streams WHERE NOT foo) AS query_2 USING (id)
ORDER BY
  sort 
LIMIT 6;