sql - 如何从 jsonb 字段中转换文本项列表以按 uuid 类型的字段执行 IN 子句?
问题描述
有foo
以下字段的表:
- uuid类型的 uuid
- jsonb类型的信息
除其他事项外,info
字段还包含bar
具有来自同一表(foo
)的 uuid 列表的键。现在我需要foo
为某些特定条目选择 info->'bar' 列表中 uuid 的所有条目。我尝试了下面的选择查询并得到了operator does not exist: uuid = uuid[]
错误
SELECT uuid
FROM foo
WHERE uuid IN (SELECT jsonb_array_to_text_array(info->'bar')::uuid[]
FROM foo
WHERE uuid='some_uuid');
我需要如何修改查询才能做到这一点?我没主意了
解决方案
没有这样的函数命名jsonb_array_to_text_array
但是您可以使用该jsonb_array_elements_text()
函数,它将每个数组元素展开为一行。使用此结果,您可以按它们过滤以找到 uuid。
SELECT
elements::int AS uuid
FROM
foo,
jsonb_array_elements_text(info -> 'bar') elements
WHERE uuid = 4
如果你想要整个记录:
SELECT
*
FROM foo
WHERE uuid IN (
SELECT
elements::int
FROM
foo,
jsonb_array_elements_text(info -> 'bar') elements
WHERE uuid = 4
)
推荐阅读
- python - 基于python中数据框中的列值循环文本数据
- javascript - Array.some() 不推入空数组
- javascript - Vue 3 和 TipTap Editor 在全局范围内传递
- spring - hibernate.cfg.xml 无法解析为 URL,因为它不存在。NetBeans Spring MVC Hibernate Web 应用程序错误
- react-native - 在 ScrollView JSON 中使用 ListItem、FlatList 发出警告
- ruby-on-rails - 我在安装 thrift (0.9.3.0) 时遇到错误,因为捆绑安装也失败了
- flask - colab BuildError 上的 Flask 应用程序 - 无法为端点构建 url
- node.js - Node Buffer.getIntBE() 如何计算负数?
- django - Django与多个模型的外键关系
- java - 如何从 Thymeleaf 获取特定的地图值?