更新:有人能帮忙吗?
我将sql查询编辑为工作示例,但仍然从post_comment_response_approval
中获取所有行。我们不应该为那些不存在于team_member_manager
表中的人返回任何行(即使他们在post_comment_response_approvement中有记录(-->参见表格示例
我正在Postgres12中编写一个sql查询。
查询应为该post_comment_response
表中的所有成员返回行,而不应为不存在于该team_member_manager
表中的成员返回任何行(即使他们在post_comment_response_approval
中有记录(。
SELECT
post_comment_response.*,
SELECT JSON_AGG(approvals_inner) FROM
(
SELECT
pcra.team_member_id,
pcra.note
FROM post_comment_response_approval pcra
) AS approvals_inner
) AS approvals,
count(*) OVER() AS total_count
FROM post_comment_response
LEFT JOIN post_comment ON post_comment.id = post_comment_response.post_comment_id
JOIN post ON post.id = post_comment.post_id
JOIN team_member ON team_member.id = post.team_member_id
JOIN team_member_manager tmm ON (tmm.managing_team_member_id = team_member.id AND tmm.managed_team_member_id = post.team_member_id)
WHERE team_member.team_id = 91
我想使用多重联接获得其他结果,但在添加JOIN team_member_manager tmm ON (tmm.managing_team_member_id = team_member.id AND tmm.managed_team_member_id = post.team_member_id)
时,我没有得到任何结果。。
managing_team_member_id
是具有定义值(91
(的
我想通过JOIN
ingpost_comment获得的managed_team_member_id
值→张贴并获得CCD_ 11。
我很小心语法,我不知道为什么我没有得到任何结果。。
表格如下:
post_comment_response
表格:
id | post_comment_id | 注释|
---|---|---|
1 | 1173 | 你好世界 |
根据您的解释,我认为您的错误是,当您想检查发布成员的经理的团队ID时,您检查了发布成员的团队ID。这意味着您必须再次加入team_member表才能查看经理的数据。
SELECT
pcr.*,
COUNT(*) OVER() AS total_count
FROM post_comment_response pcr
JOIN post_comment pc ON pc.id = pcr.post_comment_id
JOIN post p ON p.id = pc.post_id
JOIN team_member tm ON tm.id = p.team_member_id
JOIN team_member_manager tmm ON tmm.managed_team_member_id = tm.id
JOIN team_member mgr ON mgr.id = tmm.managing_team_member_id
WHERE mgr.team_id = 91;
我认为这一质疑使两者之间的关系非常清楚。帖子是由成员发布的,该成员有一个经理,经理自己也是成员表中的成员。
由于您不需要来自发布成员的任何数据,因此您可以从查询中删除此联接:
SELECT
pcr.*,
COUNT(*) OVER() AS total_count
FROM post_comment_response pcr
JOIN post_comment pc ON pc.id = pcr.post_comment_id
JOIN post p ON p.id = pc.post_id
JOIN team_member_manager tmm ON tmm.managed_team_member_id = p.team_member_id
JOIN team_member mgr ON mgr.id = tmm.managing_team_member_id
WHERE mgr.team_id = 91;
与IN
子句相同:
SELECT
pcr.*,
COUNT(*) OVER() AS total_count
FROM post_comment_response pcr
WHERE post_comment_id IN
(
SELECT pc.id
FROM post_comment pc
JOIN post p ON p.id = pc.post_id
JOIN team_member_manager tmm ON tmm.managed_team_member_id = p.team_member_id
JOIN team_member mgr ON mgr.id = tmm.managing_team_member_id
WHERE mgr.team_id = 91
);