如果存在于多个JOIN表中,则返回行



更新:有人能帮忙吗?

我将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(的

我想通过JOINingpost_comment获得的managed_team_member_id值→张贴并获得CCD_ 11。

我很小心语法,我不知道为什么我没有得到任何结果。。

表格如下:

post_comment_response表格:

注释
idpost_comment_id
11173你好世界

根据您的解释,我认为您的错误是,当您想检查发布成员的经理的团队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
);

最新更新