首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在PostgreSQL中,当JSON值旁边有一个数组时,使用" In“和"Order”进行筛选

在PostgreSQL中,当JSON值旁边有一个数组时,使用" In“和"Order”进行筛选
EN

Stack Overflow用户
提问于 2022-07-06 16:20:48
回答 2查看 40关注 0票数 1

让我们假设表下面提到了字段,在这些字段中,"details“列保留JSON格式的值。

代码语言:javascript
代码运行次数:0
运行
复制
| id | firstName | lastName | title | details(json) |

保存详细信息列的json示例可以如下所示

代码语言:javascript
代码运行次数:0
运行
复制
{
  "email": "example@gmail.com",
  "phoneNumber1": "+94111111111",
  "phoneNumber2": "+44111111111",
  "locations": [
    {
      "code": "LK",
      "name": "Sri Lanka",
      "lat": 128.12,
      "lon": 138.23
    },
    {
      "code": "UK",
      "name": "England",
      "lat": 148.12,
      "lon": 158.23
    },
    {
      "code": "IND",
      "name": "India",
      "lat": 163.12,
      "lon": 172.23
    }
  ]
}

我需要过滤从地点代码和同时需要通过详细的电子邮件订购。

举个例子

代码语言:javascript
代码运行次数:0
运行
复制
--------------------------------
details->>'code' IN ('LK','UK') 
ORDER BY details->>'email'
--------------------------------

PostgreSQL 13.4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-15 19:12:11

我使用下面提到的查询解决了这个问题。

这个问题,

代码语言:javascript
代码运行次数:0
运行
复制
SELECT firstname, lastname, details 
FROM
(
SELECT DISTINCT((person.details)::jsonb) as details, person.firstname, 
person.lastname
FROM person 
CROSS JOIN json_array_elements(person.details->'locations') AS locations
WHERE locations->>'code' IN ('LK','GB')
) as result
ORDER BY details->'email' DESC

因为,ORDER子句只能在应用了DISTINCT之后才能应用。

票数 0
EN

Stack Overflow用户

发布于 2022-07-13 17:31:27

您需要参考PostgreSQL文档中的JSON数据类型。看这里:

代码语言:javascript
代码运行次数:0
运行
复制
https://www.postgresql.org/docs/current/datatype-json.html

在这些文档中,您将看到jsonb数据类型可以用于索引(因此可以支持您的过滤需求)。

您还将看到对函数的引用,这些函数可以从JSON列提取属性,用于排序和筛选。

最后,您可能希望在数据库中创建用户定义的函数,以提取和返回JSON数据的相关部分,以便在SELECT语句中易于使用,如下所示.

代码语言:javascript
代码运行次数:0
运行
复制
   SELECT 
         GetEmailAddressFromJSON()
   FROM table 
   WHERE
      IsLocationCodeFromJSON(:locationCode)
   ORDER BY
      GetEmailAddressFromJSON()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72886911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档