我在表格中有一些ID,但两者之间存在差距。我想选择这些差距 例如,我表中的整数是:
1
2
5
9
15
我想选择:
3
4
6
7
8
10
11
12
13
14
我的PostgreSQL版本是9.1.1,所以我不能使用int4range。
答案 0 :(得分: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;
答案 1 :(得分: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)