Postgresql 查找提供的列表postgres中不存在的值

Postgresql 查找提供的列表postgres中不存在的值,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我试图找到一个查询,它将告诉我数据库中不存在的值。 例如: 现在,如果我的数据库没有seqID的3,8,9,我将如何仅查找/显示缺失的seqID 我认为,如果不将所有可能的数字存储在某个表中(或者仅存储0-9,并使用交叉连接来表示更高的数字),就无法做到这一点。不能选择数据中不存在的ID或数字。如果创建另一个表,则查询如下所示: SELECT newID FROM newTable nt LEFT JOIN flu f ON f.seqID = nt.newID AND f.

我试图找到一个查询,它将告诉我数据库中不存在的值。 例如:


现在,如果我的数据库没有seqID的3,8,9,我将如何仅查找/显示缺失的seqID

我认为,如果不将所有可能的数字存储在某个表中(或者仅存储0-9,并使用交叉连接来表示更高的数字),就无法做到这一点。不能选择数据中不存在的ID或数字。如果创建另一个表,则查询如下所示:

SELECT newID
FROM newTable nt
LEFT JOIN flu f ON f.seqID = nt.newID
          AND f.seqID NOT IN (SELECT * from newTable)
newID将是新创建的包含值的表的列名。
newTable是用于存储值的新表的名称。

首先,由于您似乎是Stackoverflow的新手,下面是一些礼仪和发布提示:

  • 始终包括相关的版本信息。这里,你可能想要 包括PostgreSQL的版本信息
  • 对你想做的事情做一个简短的描述
  • 包括任何相关的源代码(你做到了;做得很好)
  • 包括任何错误
  • 解释你希望结果是什么(你做到了;干得不错)
  • 跟进并标出答案。对很多人来说,如果你不付出 如果答案正确,他们不会帮你的。只是一个提示
由于您没有完成上述所有操作,我只能猜测,因此我将根据您的代码进行一些假设。你似乎需要一个例外声明。以下代码是在PostgreSQL 9.1上开发的

create temp table my_value(seq_id int);

insert into my_value(seq_id) values
(1), (2), (4), (5), (6), (7);

select unnest(array[1, 2, 3, 4, 5, 6, 7, 8, 9]) 
EXCEPT 
select distinct seq_id from my_value;
我假设您有一个int的硬编码列表(如问题中的示例)。我刚刚创建了一个临时表用于测试和演示,但我相信您可以根据自己的情况进行必要的调整。如果没有硬编码的int列表,那么只需再次选择包含它的任何源


希望这有帮助。欢迎使用Stackoverflow。

您认为这会比“例外”更有效/更无效吗。看起来会少一些,但我很好奇你的想法。我发现你的答案通常都很好@戴维斯:我认为这不会有什么不同。但唯一的方法是在使用真实数据时查看执行计划。是的,我回去查看了我的计划,并试图用你的计划捏造一些东西。很难说,因为这么小的样品尺寸很难说。只是想确保使用EXCEPT等没有众所周知的问题。再说一次,你似乎总是能给出很好的答案。谢谢谢谢。以后我会遵循所有的发帖提示
with idlist (id) as (
   values (1),(2),(3),(4),(5),(6),(7),(8),(9)
)
select l.id as missing_seq_id
from idlist l
  left join flu f on f.seqID = l.id
where f.seqID is null;
with idlist (id) as (
   values (1),(2),(3),(4),(5),(6),(7),(8),(9)
)
select l.id as missing_seq_id
from idlist l
  left join flu f on f.seqID = l.id
where f.seqID is null;