加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在JSON数组数据字段中查询数据

发布时间:2020-12-12 08:55:11 所属栏目:MsSql教程 来源:网络整理
导读:目前正在postgres 9.3中首次使用 JSON字段,并且我在查询数组时遇到了一些困难. 具有JSON数组数据类型的字段称为“帐户”,一些示例数据如下所示 [{name: "foo",account_id: "123"},{name: "bar",account_id: "321"}] 我希望能够找到拥有account_id 123的公司的
目前正在postgres 9.3中首次使用 JSON字段,并且我在查询数组时遇到了一些困难.

具有JSON数组数据类型的字段称为“帐户”,一些示例数据如下所示

[{name: "foo",account_id: "123"},{name: "bar",account_id: "321"}]

我希望能够找到拥有account_id 123的公司的ID.我目前遇到问题的查询如下:

select id from companies where json_array_elements(accounts)->>'account_id' = '123'

这会导致错误:

argument of WHERE must not return a set

解决方法

json_array_elements(…)返回一个集合,应用的结果也是如此 – >>和=到集合.注意:
regress=> select json_array_elements('[{"name": "foo","account_id": "123"},{"name": "bar","account_id": "321"}]') ->> 'account_id' = '123';
 ?column? 
----------
 t
 f
(2 rows)

您希望能够写入’123’= ANY(…)但不幸的是没有数组输入就不支持.令人惊讶的是,“123”IN(…)也没有,我认为我们将不得不解决这个问题.

所以,我会使用LATERAL.这是一种方法,如果它有多个匹配,它将多次返回公司ID:

CREATE TABLE company AS SELECT 1 AS id,'[{"name": "foo","account_id": "321"}]'::json AS accounts;

SELECT id 
FROM company c,LATERAL json_array_elements(c.accounts) acc 
WHERE acc ->> 'account_id' = '123';

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读