【发布时间】:2020-12-21 21:31:25
【问题描述】:
我有以下表格
CREATE TABLE employee(id serial PRIMARY KEY,employee jsonb);
CREATE TABLE perks_details(id serial PRIMARY KEY,details jsonb);
insert into employee(employee) values
('{"name": "name1",
"perks": [
{"id": 123, "valid_from": "T23:28:56.782Z"},
{"id": 456, "valid_from": "T23:28:56.782Z"},
{"id": 789, "valid_from": "T23:28:56.782Z"}
]
}');
insert into perks_details(details) values('{"id":123,"detail1":"lorem","detail2":"lorem"}');
insert into perks_details(details) values('{"id":123,"detail3":"lorem","detail4":"lorem"}');
insert into perks_details(details) values('{"id":456,"detail5":"lorem","detail6":"lorem"}');
如何从employee left join perks_details 在 perks_details 表和聚合函数中使用带有 id 的 perks id 编写选择查询,以便我的结果数据如下所示:
{
"name": "name1",
"perks": [
{
"id": 123,
"valid_from": "T23:28:56.782Z",
"details": [
{
"id": 123,
"detail1": "lorem",
"detail2": "lorem"
},
{
"id": 123,
"detail3": "lorem",
"detail4": "lorem"
}
]
},
{
"id": 456,
"valid_from": "T23:28:56.782Z",
"details": [
{
"id": 456,
"detail5": "lorem",
"detail6": "lorem"
}
]
},
{
"id": 789,
"valid_from": "T23:28:56.782Z",
"details": []
}
]
}
我尝试了多种变体,但无法找到有效的查询。请在这里给我建议/帮助。
更新我有这个带有左连接的查询,但结果不是我所期望的
select e.id, perk, perks_details.details
from employee AS e, jsonb_array_elements(employee->'perks') perk
LEFT JOIN perks_details on perks_details.details -> 'id' = perk->'id'
group by e.id, perk.value, perks_details.details;
【问题讨论】:
-
您需要更多解释您想要进行的处理。 JSON 格式的结果与数据库表并不完全一致。
-
对不起,我的错。更新了结果。我需要将 perks.id 与 perks_details.id 加入并在结果 json 中添加每个 perks 的 perks 详细信息。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
标签: sql postgresql left-join jsonb postgresql-10