我正在尝试使用 PostgreSQL 中的 jsonb_path_exists 函数来检查 JSONB 字段(包含对象列表)是否包含一个对象,其中特定键具有属于给定值列表的值。
像这样的简单条件可以正常工作(与单个值相比):
SELECT t.id
FROM some_scheme.some_table as t
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id == "0e66fef9-0f59-4742-8669-74f41fc26a3f")');
但是,我想检查 id 字段是否是多个可能值之一,而不仅仅是一个。我尝试使用“IN”运算符进行以下查询:
SELECT t.id
FROM some_scheme.some_table as t
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id in ("0e66fef9-0f59-4741-9669-74f41fc26a3f", "1e66fef9-0f59-4741-9669-74f41fc26a3f"))');
和
WHERE jsonb_path_exists(t.jsonb_field, '$[*] ? (@.id in ["0e66fef9-0f59-4741-9669-74f41fc26a3f", "1e66fef9-0f59-4741-9669-74f41fc26a3f"])');
但这会导致语法错误:
ERROR: syntax error in jsonpath near " " SQL state: 42601
我想知道 PostgreSQL 是否支持使用 JSONPath 中的“IN”检查列表中的成员身份,或者是否有其他方法可以实现这一点。