Sai*_*h A 3 sql postgresql node-postgres
我有两个表,分别为:1. 采访 2. 问题
每个面试表还可以多出一个问题。
我想以这样的方式检索数据:在一行中,面试详细信息以及所有问题及其详细信息在单列中呈现,并以数组格式与该特定面试相关联。
我已经尝试了 array_agg()、json_object_build() 的所有方法,但似乎无法使其正常工作。
模式:
表模式图像
SQL 查询我现在有:
SELECT
i.id as interview_id, i.board, i.time_taken, i.notes, i.interview_date,
u.id as user_id, u.first_name, u.last_name, u.state, u.district, u.optional,
j.name as job,
json_build_object('question', q.question, 'answer', q.answer, 'member', q."member", 'order', q."order") as questions
FROM interview i
LEFT JOIN question q ON q.interview_id = i.id
INNER JOIN users u ON i.user_id = u.id
INNER JOIN user_jobs uj ON uj.user_id = u.id
INNER JOIN job j ON uj.job_id = j.id
GROUP BY u.id, i.id, j.name, q.question, q.answer, q.order, q."member";
Run Code Online (Sandbox Code Playgroud)
我得到的结果:
interview_id | time | ... | questions
1001 | 25 | ... | {"question": "How are you", "answer": "I'm good", ...}
1001 | 25 | ... | {"question": "What's your name", "answer": "My name is..", ...}
1002 | 40 | ... | {"question": "Who are you", "answer": "I'm nobody", ...}
1002 | 40 | ... | {"question": "Are you a robot", "answer": "No, I'm not", ...}
Run Code Online (Sandbox Code Playgroud)
我想合并具有相同 Interview_id 的行并将问题合并到 json 对象数组中。在 json_build_object() 周围使用 array_agg() 也没有用。
我想要的结果:
interview_id | time | ... | questions
1001 | 25 | ... | [{"question": "...", "answer": "...", ...}, {"question": "...", "answer": "...", ...}]
1002 | 40 | ... | [{"question": "...", "answer": "...", ...}, {"question": "...", "answer": "...", ...}]
Run Code Online (Sandbox Code Playgroud)
是否可以或者在检索面试 ID 后单独查询问题表更好?
数据库:PostgreSQL
环境:Node.js - Express(node-postgres 包)
非常感谢您的帮助。请询问是否需要更多详细信息。
您需要修复GROUP BY并使用JSON_AGG():
SELECT i.id as interview_id, i.board, i.time_taken, i.notes, i.interview_date,
u.id as user_id, u.first_name, u.last_name, u.state, u.district, u.optional,
j.name as job,
json_agg(json_build_object('question', q.question, 'answer', q.answer, 'member', q."member", 'order', q."order")) as questions
FROM interview i LEFT JOIN
question q
ON q.interview_id = i.id JOIN
users u
ON i.user_id = u.id JOIN
user_jobs uj
ON uj.user_id = u.id JOIN
job j
ON uj.job_id = j.id
GROUP BY u.id, i.id, j.name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |