选择postgres中尚未包含在表中的所有整数

the*_*yew 1 sql postgresql left-join gaps-and-islands generate-series

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

1
2
5
9
15
Run Code Online (Sandbox Code Playgroud)

我想选择:

3
4
6
7
8
10
11
12
13
14
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)