在H2数据库中,如何使用ANY(array)?

in H2 database, how to use ANY(array)?

在 H2 数据库中,我正在尝试使用 ANY 查询数组列,类似于:

ALTER TABLE person ADD COLUMN tel_numbers VARCHAR ARRAY;
SELECT * FROM person p WHERE '+123456' = ANY(p.tel_numbers) 

这会引发错误 90054-210 聚合函数的使用无效

我还尝试在 p.tel_numbers 周围添加额外的括号作为子查询,查看文档 http://h2database.com/html/functions-aggregate.html#any 但它没有帮助。如何为H2正确编写它?希望有一个在 Postgres 中也适用的解决方案...

PS:查询是通过 Hibernate 查询生成器生成的,但这不应改变问题或答案。

SQL 标准中的量化比较谓词在其右侧有一个子查询。

使用数组而不是子查询的量化比较谓词是 non-portable PostgreSQL-specific 功能。 H2 当前(版本 2.1.212)仅支持该功能的一小部分:与作为 JDBC 参数传递的数组进行量化相等比较 (= ANY(?)).

(还有一个不相关的同名聚合函数。)

您可以使用 H2-specific

SELECT * FROM person p WHERE ARRAY_CONTAINS(p.tel_numbers, '+123456')

但此查询与 PostgreSQL 不兼容。这意味着您需要在 PostgreSQL 和 H2.

中使用不同的查询

完全standard-compliant查询是

SELECT * FROM person p WHERE '+123456' = ANY(SELECT * FROM UNNEST(p.tel_numbers));

它适用于 PostgreSQL,但不幸的是,由于 known issue.[=14=,它不适用于 H2(至少在当前 2.1.212 和更旧版本中) ]