1

我在表格中有一些 id,但两者之间存在差距。我想选择这些差距。
例如,我表中的整数是:

1
2
5
9
15

我想选择:

3
4
6
7
8
10
11
12
13
14

我的 PostgreSQL 版本是 9.1.1,所以我不能使用 int4range。

4

2 回答 2

5

使用generate_series()LEFT JOIN表:

SELECT g.nr
FROM   generate_series(1,15) g(nr)
LEFT   JOIN tbl USING (nr)
WHERE  tbl.nr IS NULL;

将所有出现的 替换为nr您的实际列名。
或使用其他基本技术之一:

动态确定范围:

SELECT g.nr
FROM  (SELECT generate_series(min(nr), max(nr)) AS nr FROM tbl) g
LEFT   JOIN tbl USING (nr)
WHERE  tbl.nr IS NULL;
于 2014-08-22T07:12:50.733 回答
2
with t (id) as (
values (1), (2), (5), (9), (15)
)
select * from generate_series((select min(id) from t), (select max(id) from t)) as g(id)
where g.id not in (select id from t)
于 2014-08-22T07:13:19.190 回答