Postgresql 选择postgres表中数组字段包含NULL的行
我们的系统使用postgres作为其数据库 我们的查询可以从数据库表中选择行,其中表中的数组字段包含特定值,例如: 查找哪个员工管理ID为123的员工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
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_的答案更合适。