Postgresql 选择postgres表中数组字段包含NULL的行

Postgresql 选择postgres表中数组字段包含NULL的行,postgresql,Postgresql,我们的系统使用postgres作为其数据库 我们的查询可以从数据库表中选择行,其中表中的数组字段包含特定值,例如: 查找哪个员工管理ID为123的员工 staff\u managed\u id是一个postgres数组字段,其中包含该员工管理的员工数组 此查询按预期工作: select * from employees where 123=any(staff_managed_ids) 现在我们需要查询数组字段包含postgres NULL的位置。我们尝试了以下查询,但不起作用: select

我们的系统使用postgres作为其数据库

我们的查询可以从数据库表中选择行,其中表中的数组字段包含特定值,例如:

查找哪个员工管理ID为123的员工

staff\u managed\u id
是一个postgres数组字段,其中包含该员工管理的员工数组

此查询按预期工作:

select *
from employees
where 123=any(staff_managed_ids)
现在我们需要查询数组字段包含postgres NULL的位置。我们尝试了以下查询,但不起作用:

select *
from employees
where NULL=any(staff_managed_ids)
我们知道
staff\u managed\u id
数组字段包含来自其他查询的空值


我们是否错误地使用NULL?

使用
=
无法比较NULL。使用的运算符只有
为NULL
不为NULL

要检查空值,需要取消对元素的测试:

select e.*
from employees e
where exists (select *
              from unnest(e.staff_managed_ids) as x(staff_id)
              where x.staff_id is null);

如果所有id值均为正值,则可以这样写:

select *
from employees
where (-1 < all(staff_managed_ids)) is null;
选择*
来自员工
其中(-1

其工作原理是-1应该小于所有值,但是使用null进行比较会使整个数组比较表达式为null。

感谢您的回答-虽然它更紧凑,但我们不能保证每个现有id都大于-1,因此在我们的例子中,使用无名称的@a_horse_的答案更合适。