postgresql 为什么Postgres在对空数组测试列时不返回任何内容?

6tqwzwtp  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(86)

我试着在网上查了一下,没找到什么。
假设如下:

create schema if not exists sb;

create table if not exists sb.test (id serial primary key);

insert into sb.test values (1), (2), (3);

个字符
为什么结果集是空的?
如果我这样做,那么它就像预期的那样工作:

select * from sb.test where id != any('{}'::int[])

-- [ { "id": 2 }, { "id": 3 } ]


如何获取返回所有记录的第一个查询?

uurity8g

uurity8g1#

从你的注解中,你想要做的是从表中获取所有记录,除了你已经在其他地方(例如,在连接到你的数据库的应用程序中)构建的id列表。
我将演示在参数中使用非空数组的可能性:
你可以用UNNEST来实现:

SELECT * FROM test
WHERE id NOT IN (SELECT UNNEST(ARRAY[1, 2]))

字符串
或者使用子查询(下面,使用VALUES):

SELECT * FROM test
WHERE id NOT IN (VALUES(1),(2))


编辑:
正如我在评论中所说,下面的工作也是如此:

SELECT * FROM test
WHERE id != all(ARRAY[1,2])


Id 3确实不同于数组中的所有值。

相关问题