sql - 查询在postgres jsonb中相交的json键
问题描述
我如何查询相交的 jsonb 键:
前任:
kv | column1
-----------------------------------------------------------
[{"k1": "v1"}, {"k2": "v22"}] | web
[{"k10": "v5"}, {"k9": "v21"}] | mobile
[{"k1": "v1"}, {"k5": "v24"}] | web1
[{"k5": "v1"}, {"k55": "v24"}] | web1
在这里,第 1 行和第 3 行有 key k1
,第 3 行和第 4 行有 key k5
。
所以,答案应该是第 1,3 和 4 行。
解决方案
你可以试试这个:
--This part is to simulate your table
with yourTable as (
select (string_to_array(t,'|'))[1]::jsonb kv,(string_to_array(t,'|'))[2] column1 from (
select unnest(string_to_array($$[{"k1": "v1"}, {"k2": "v22"}] | web
[{"k10": "v5"}, {"k9": "v21"}] | mobile
[{"k1": "v1"}, {"k5": "v24"}] | web1
[{"k5": "v1"}, {"k55": "v24"}] | web1$$::character varying,E'\n')) t
) b
)
-- This is your request :
select distinct kv,column1 from (
select *,count(*) over (partition by elt) nb_inter from (
select kv,column1,jsonb_object_keys(jsonb_array_elements(kv)) elt from yourTable
) a
) b
where nb_inter >1
推荐阅读
- flutter - Flutter 动态高度空间使用 ConstrainedBox
- gmail-api - IMAP/POP3 的基本身份验证 - GMAIL
- reactjs - 如何使用 Storybook AddOns optionsKnob 解析值
- css - 使用css滚动快照获得两列粘性
- javascript - 可以授予对我的 Amazon S3 存储桶中某些对象的公共读取访问权限吗?
- react-native - React Navigation v5:屏幕过渡动画
- multithreading - kotlin协程和asyncTask类和multiThread有什么区别
- javascript - 将点击功能从 更改为
- java - 当查询方法的同一字段名称中有两个连续的大写字母时,spring jpa无法找到该字段
- jenkins - 在 Github PR 中显示 Jenkins 构建的实时状态