我的数据库表是这样的(数据是 JSONB 列):
id | data
----+--------------------------------------
1 | {"tags": [{"name": "tag1"}, {"name": "tag2"}]}
2 | {"tags": [{"name": "tag2"}]}
3 | {"tags": [{"name": "tag3"}]}
4 | {"tags": [{"name": "tag4"}]}
Run Code Online (Sandbox Code Playgroud)
我想编写一个查询,该查询将返回data包含标签tag2或 的行tag3。因此应返回第 1、2 和 3 行。我一直在查看 postgresql JSONB 文档,但我不清楚如何查询这样的嵌套结构。我该如何编写 where 子句?
小智 17
jsonb_array_elements会损害性能。如果这是一个问题,您可以使用此查询代替
SELECT * FROM MyTable where
data @> '[{"name": "tag2"}]'::jsonb
or
data @> '[{"name": "tag3"}]'::jsonb;
Run Code Online (Sandbox Code Playgroud)
Hal*_*Ali 16
在未嵌套的 json 数组上使用带有过滤器的 where contains 将返回 id 为 1、2 和 3 的行
SELECT *
FROM mytable
WHERE EXISTS (
SELECT TRUE
FROM jsonb_array_elements(data->'tags') x
WHERE x->>'name' IN ('tag2', 'tag3')
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17955 次 |
| 最近记录: |