Sql 在postgres中选择表中尚未包含的所有整数
我在表中有一些ID,但它们之间有间隙。我想选择这些间隙。 例如,我的表格中的整数是: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。 或
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行,并且只会增加。那么有没有可能加快这个查询的速度呢?