- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有occasion
和relation
表。 relation.occasions
是一个json类型的字段,里面包含了一个occasion key的数组。我想通过关系获取 occasion
记录,其中 occasion.key
在 relation.occasions
中。假设这是我的数据库数据:
场合
key | name |
-------------------------------------
BIRTHDAY | Birthday |
ANNIVERSARY | Anniversary |
关系
key | occasions |
------------------------------------------------------
FATHER | [ "BIRTHDAY", "ANNIVERSARY" ] |
FRIEND | [ "BIRTHDAY" ] |
这是我尝试使用的查询:
SELECT * FROM occasion o WHERE o.key IN
(SELECT json_array_elements(r.occasions)::text from relation r WHERE r.key = 'FATHER')
结果是 0 行而不是预期的 2 行。有人可以提示我我做错了什么吗?我还能如何达到预期的结果?
最佳答案
函数 json_array_elements()
返回一个集合,而不是数组,因此您应该将它用作行源,而不是在选择列表中。
正确的查询应该是:
SELECT o.*
FROM occasion o
JOIN (
SELECT DISTINCT j.value
FROM relation
JOIN LATERAL json_array_elements_text(occasions) j(value) ON true
WHERE key = 'FATHER') sub ON o.key = sub.value;
你也可以在没有子查询的情况下将其展平,但我发现这个版本更具可读性(查询计划器无论如何都会进行展平)。
关于json - 如何将 PostgreSQL jsonb_array_elements 与 WHERE <value> IN 子句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159694/
我有一个名为 info 的 jsonb 列,某些类型具有对象的形式:{ id: 2 } 和一些其他类型它具有数组的形状:[{ id: 2 }] 我有一个执行此操作的查询: SELECT * FROM
我有一个 PostgreSQL 表(creatures),如下所示: | id | json | ------------------------------- | 1 |
我有一个包含多行的 JSONB 列的表。每行包含一个 JSON 数组。 现在我需要将其放入行中,但我还需要元素的位置。 例如 select * from ( select jsonb_array
我正在访问 jsonb 字段中的数组(一个名为“choice_values”的 json 对象),并想将其内容解析为逗号分隔的文本字段。 SELECT jsonb_array_elements
我正在使用 SQLAlchemy ORM 并试图弄清楚如何生成 PostgreSQL 查询,大致如下: SELECT payments.* FROM payments, jso
我有一个带有 jsonb 数据类型列标签的 MessagesList 表。列中的数据类似于 ["abc","xyz"]。我需要在列中搜索值“abc” 我的查询 select value from me
我想使用 json_array_elements 来扩展 json 数组。但它的工作方式很奇怪。请看下面。 select json_array_elements('[1, 2]') as a, jso
在线扑克玩家可以选择购买游戏室 1 或游戏室 2 的使用权。 并且他们可以因作弊而被暂时禁止。 CREATE TABLE users ( uid SERIAL PRIMARY KEY,
尝试分配 JSONB_ARRAY_ELEMENTS 的结果时调用VARCHAR array (供以后在 SELECT ... WHERE IN (UNNEST(...)) 语句中使用),以下存储函数:
我尝试搜索解决方案,但没有找到适合我的情况的任何内容... 这是数据库声明(简化): CREATE TABLE documents ( document_id int4 NOT NULL GE
我在 jsonb 数组上进行横向交叉连接,我希望获取数组元素的 row_number(或其等效项)。查看 row_number 文档,我发现除了“分区依据”之外,我还需要执行“排序依据”,但实际上并没
我有occasion 和relation 表。 relation.occasions是一个json类型的字段,里面包含了一个occasion key的数组。我想通过关系获取 occasion 记录,其
繁花似锦, 我有一个像这样的 JSON 数组 items (PostgreSQL 9.4): [{name: "foo"}, {name: "bar"}, {name: "baz"}] 我想要的是
我是一名优秀的程序员,十分优秀!