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

Postgres how can I merge 2 separate select queries into 1

我正在使用 postgres 9.4,我想将 2 个单独的查询合并到一个语句中。我一直在看这个 post 但仍然不知道如何使用它。这 2 个查询确实独立工作。他们在这里

# 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 行。这就像一个建议引擎,其中查询 #1 有一个主线程,查询 #2 给出最多 5 个不同的建议,但是它们显然位于不同的 table.

没有模型和数据,我在这个 SQL Fiddle.

中用两者的假人模拟了这个问题
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;

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

所以,这是怎么回事?列 id 代表您的 table 和子查询共有的任何列。 votes.user_id我做了某事。在一个子查询中为 select,在另一个子查询中为 streams.foo

因为你要求最多有6行,所以我用了两次limit子句。首先在子查询中,以防万一 table 中有大量您不想 select 的行,然后在外部查询中再次限制行数。 Fiddle 关于两个限制并切换 WHERE fooWHERE NOT foo 你明白为什么了。

在第一个子查询中,我添加了一个排序列,就像在那个答案中所做的那样。那是因为我猜你希望第一个子查询的结果也总是在最前面。