Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在postgres中选择表中尚未包含的所有整数_Sql_Postgresql_Left Join_Gaps And Islands_Generate Series - Fatal编程技术网

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

Sql 在postgres中选择表中尚未包含的所有整数,sql,postgresql,left-join,gaps-and-islands,generate-series,Sql,Postgresql,Left Join,Gaps And Islands,Generate Series,我在表中有一些ID,但它们之间有间隙。我想选择这些间隙。 例如,我的表格中的整数是: 1 2 5 9 15 我想选择: 3 4 6 7 8 10 11 12 13 14 我的PostgreSQL版本是9.1.1,因此无法使用int4range。使用并左键连接到表: SELECT g.nr FROM generate_series(1,15) g(nr) LEFT JOIN tbl USING (nr) WHERE tbl.nr IS NULL; 用实际列名替换所有出现的nr。 或

我在表中有一些ID,但它们之间有间隙。我想选择这些间隙。 例如,我的表格中的整数是:

1
2
5
9
15
我想选择:

3
4
6
7
8
10
11
12
13
14
我的PostgreSQL版本是9.1.1,因此无法使用int4range。

使用并左键连接到表:

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;
使用并左键联接到表:

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;

您可能希望使用select maxnr from tbl,而不是硬编码上限。谢谢,缺少generate_系列:我对left join有问题。我用我的表名替换了所有TBL,用我的列替换了第二行的nr。当我运行查询时,我得到以下错误:错误:USING子句中指定的列nr在右侧不存在table@thecoparyew:使用与列名相同的名称。在我的答案中替换所有nr实例。@ErwinBrandstetter我刚刚这么做了。但现在查询大约需要400秒,并且仍在运行。表中有大约2mio行,并且只会增加。那么有没有可能加快此查询的速度?您可能希望使用select maxnr from tbl,而不是硬编码上限。谢谢,缺少generate_series:我对left join有问题。我用我的表名替换了所有TBL,用我的列替换了第二行的nr。当我运行查询时,我得到以下错误:错误:USING子句中指定的列nr在右侧不存在table@thecoparyew:使用与列名相同的名称。在我的答案中替换所有nr实例。@ErwinBrandstetter我刚刚这么做了。但现在查询大约需要400秒,并且仍在运行。表中有大约2mio行,并且只会增加。那么有没有可能加快这个查询的速度呢?