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