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 に答える