我一直在stackoverflow上搜索这个答案,但没有找到任何有用的东西.我在my_tbl中有数据:
folder_id | links
--------------+----------------------------------------------------------------
761 | [{"ids": "[82293,82292]", "index": "index_1"}, {"ids": "[82293,82292]", "index": "index_2"}]
769 | [{"ids": "[82323,82324]", "index": "index_3"}]
572 | [{"ids": "[80031,79674,78971]", "index": "index_4"}]
785 | [{"ids": "[82367,82369]", "index": "index_5"}, {"ids": "[82368,82371]", "index": "index_6"}]
768 | [{"ids": "[82292,82306]", "index": "index_7"}]
Run Code Online (Sandbox Code Playgroud)
我想得到链接所有的行 - >>'ids'包含82292.所以在这种情况下,它应该返回我folder_id 761和768.
到目前为止,我实现了通过-jsonb_array_elements(链接) - >>'ids'将链接数组与链接分开
不知道如何进一步.
您可以使用jsonb_array_elements将json数组转换为行集.您可以将此值用于"ids"的值.使用该@>操作,您可以检查,如果数组包含一个值:
select distinct folder_id
from YourTable
cross join lateral
jsonb_array_elements(links) ids(ele)
where (ele->>'ids')::jsonb @> '[82292]'
Run Code Online (Sandbox Code Playgroud)
一个棘手的部分是"[82293,82292]"存储为字符串,而不是数组.该ele->>'ids'表达式检索"[82293,82292]"作为使用字符串->>操作员(双>使它返回文本代替jsonb.)字符串的内容被转换成由阵列::jsonb.
| 归档时间: |
|
| 查看次数: |
5402 次 |
| 最近记录: |