在PostgreSQL中过滤jsonb数据时遇到麻烦

时间:2018-10-18 16:50:35

标签: sql postgresql jsonb

我正在尝试学习如何过滤jsonb数据。当我跑步时:

SELECT DISTINCT jsonb_array_elements(data) 
FROM reports 
WHERE data @> '[{"status": "Active"}]'

与其仅返回status: Active的行,它似乎忽略了WHERE子句,我还返回了包含status: Inactive的行

需要一些帮助来了解此处的情况。

数据看起来像

[{"report": "Report1", "status": "Active"},
 {"report": "Report2", "status": "Inactive"},
 {"report": "Report3", "status": "Inactive"},
 {"report": "Report4", "status": "Active"}]

1 个答案:

答案 0 :(得分:0)

select * from reports
join lateral jsonb_array_elements(data) j(v)
on true
where
v->>'status' = 'Active'

此处v是jsonb数组中的元素,例如{"report": "Report1", "status": "Active"}

然后使用->>运算符过滤“状态”键,其中值是“活动”