过去几天我一直在为一个查询而苦苦挣扎,我希望有人可以提供帮助。我有3张 table :
CREATE TABLE user (
ID SERIAL PRIMARY KEY,
USERNAME TEXT NOT NULL UNIQUE
);
CREATE TABLE skill (
ID SERIAL PRIMARY KEY,
NAME TEXT NOT NULL
);
CREATE TABLE user_skill (
ID SERIAL PRIMARY KEY,
USER_ID INTEGER REFERENCES user(id),
SKILL_ID INTEGER REFERENCES skill(id)
);
我正在尝试运行一个查询,以便我可以返回一个具有 JSON 格式的对象,如下所示:
{
"id": 1,
"username": "test123",
"skills": [{
"name": "skillOne"
}, {
"name": "skillTwo"
}, {
"name": "skillThree"
}]
}
我到目前为止看起来像这样:
SELECT
json_build_object(
'id', u.id,
'username', u.username,
'skills', jsonb_agg(skill)
)
FROM (
SELECT
jsonb_build_object(
'name', s.name
) skill
FROM user_skill us
JOIN skill s ON us.skill_id = s.id
) xombi_user u;
编辑:
我现在有了它,它可以正确返回 json 数组,但现在需要从中构建一个 json 对象。
SELECT u.id, u.username, jsonb_agg(s)
FROM user u
LEFT JOIN user_skill us ON u.id = us.user_id
LEFT JOIN skill s ON us.skill_id = s.id
WHERE u.id = 60
GROUP BY u.id;
最佳答案
知道了!希望它可以帮助某人:
SELECT
json_build_object(
'id', u.id,
'username', u.username,
'skills', jsonb_agg(s)
)
FROM user u
LEFT JOIN user_skill us ON u.id = us.user_id
LEFT JOIN skill s ON us.skill_id = s.id
WHERE u.id = 60
GROUP BY u.id;
关于json - Postgres 多对多 JSON 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39135160/