我有一个project
表与m2m密钥到users
表和skills
表。Postgres加入返回加倍列时使用聚合
我想执行一个请求postgres在哪里我得到了每个项目的技能和用户列表。
因此,在本质
{
"project": "foo",
"skills": [
{
"id":1,
"name": "js"
},
{
"id":2,
"name": "py"
}
],
"members":[
{
"id":1,
"name": "foo"
},
{
"id":2,
"name": "bar"
}
]
}
我使用的json_build_object
到多种技能/用户行转换到一个JSON数组
这是我的SQL
SELECT project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id',s.id,'name',s.skill)) AS skills,
array_agg(json_build_object('id',p.project,'name',p.Username)) AS members
from project
LEFT JOIN (
select project_skills.id,project_skills.skill,project_skills.project AS name
from project_skills
) s on s.name = project.name
LEFT JOIN (
select account_projects.Username, account_projects.project AS name
from account_projects
) p on p.name = project.name
WHERE project.id = $1
GROUP BY project_id,project_name
如果我运行这个查询虽然,技能/用户表是加倍(而不是3个用户,我得到6)。
我应该添加到查询中以确保没有重复计数?
我使用的Postgres 9.4
谢谢你展示第二个:) – Kannaj