Postgresql 如何获取与条件匹配的所有数据集。不外接

Postgresql 如何获取与条件匹配的所有数据集。不外接,postgresql,psql,Postgresql,Psql,我想得到所有包含某个mitglieder数据集的团队以及这些团队中所有其他mitglieder数据集。 例如: A队得到安娜和彼得米格利德,B队得到安娜,玛丽亚和约翰尼和米娅和C队得到约翰尼和米娅。如果我想找到Anna,那么输出应该如下所示: 计数现在并不重要 我试过这段代码,但这段代码给出了mitglieder的所有数据集 select teams.name, mitglieder.username, count(eintraege.eintrag_id) from (eintraege

我想得到所有包含某个mitglieder数据集的团队以及这些团队中所有其他mitglieder数据集。 例如:

A队得到安娜和彼得米格利德,B队得到安娜,玛丽亚约翰尼米娅和C队得到约翰尼和米娅。如果我想找到Anna,那么输出应该如下所示:

计数现在并不重要

我试过这段代码,但这段代码给出了mitglieder的所有数据集

select teams.name, mitglieder.username, count(eintraege.eintrag_id) 
from (eintraege 
inner join teams 
    on eintraege.team = teams.team_id) 
right join mitglieder 
    on eintraege.mitglied = mitglieder.mitglied_id and mitglieder.mitglied_id = 101 
group by teams.name, mitglieder.username;


提前谢谢

我不确定语法,因为我没有尝试运行,但通过这种方式,您可以尝试

SELECT      TEAMS.NAME,
            EINTRAEGE_MITGLIEDER.USERNAME, 
            EINTRAEGE_MITGLIEDER.EINTRAG_ID
FROM        TEAMS TEAMS,
            (SELECT     MITGLIEDER.USERNAME, 
                        COUNT(EINTRAEGE.EINTRAG_ID),
                        EINTRAEGE.TEAM
            FROM        EINTRAEGE EINTRAEGE,
                        MITGLIEDER MITGLIEDER
            WHERE       EINTRAEGE.MITGLIED = MITGLIEDER.MITGLIED_ID
            AND         AND MITGLIEDER.MITGLIED_ID = 101
            GROUP BY    MITGLIEDER.USERNAME,
                        EINTRAEGE.TEAM) EINTRAEGE_MITGLIEDER
WHERE       TEAMS IN (  SELECT      EINTRAEGE.EINTRAG_ID
                        FROM        EINTRAEGE.MITGLIED = MITGLIEDER.MITGLIED_ID
                        AND         AND MITGLIEDER.MITGLIED_ID = 101
                     )
AND         TEAMS.TEAM_ID = EINTRAEGE_MITGLIEDER.TEAM

从mitglieder开始,然后通过eIntrage加入团队,以获取Anna所属的团队作为查询的基础,然后再次加入其他表以创建输出:

select distinct t.name, m2.username
from mitglieder m1
join eintraege e1 on e1. mitglieder = m1. mitglieder_id
join teams t on t.team_id = e1.team
join eintraege e2 on e2.team = t.team_id
join mitglieder m2 on m2. mitglieder_id = e2.mitglieder
where m1.username = 'Anna'

你还没有定义你想要的计数,所以我忽略了这一点。

嗨,我想这是你的答案

select teams.name, mitglieder.username, count(eintrag_id) 
FROM eintraege 
LEFT JOIN teams on eintraege.team = teams.team_id 
LEFT JOIN mitglieder on eintraege.mitglied =mitglieder.mitglied_id 
where teams.team_id in (SELECT team from eintraege where mitglied = 1)
group by name, mitglied_id
order by teams.name
工作示例

我认为在eintrage.mitglied=mitglieder.mitglied_id和mitglieder.mitglied_id=101应该在eintrage.mitglied=mitglieder.mitglied_id上,其中mitglieder.mitglied_id=101@JehadAhmadJaghoub不,那不行。这样,我只得到那些米格利德的id是101的人,但我希望所有米格利德都在那个队。不仅101.select teams.name、mitglieder.username、count(eintrage.eintrag_id)来自eintrage,还可以在eintrage.team=teams上加入团队。team_id在eintrage.mitglied=mitglieder.mitglied_id上按teams.name左键加入mitglieder请在没有组的情况下尝试,或者您只能使用mitglieder.username进行组,但不能team@JehadAhmadJaghoub那是行不通的,因为计数()所以我必须分组,但如果我按你建议的mitglieder.username分组,它也不起作用。你想要什么计数?首先,e2.username不起作用,你的意思是可能m2。不管怎么说,当我运行这个程序时,我得到了所有414行,大部分都重复了20多次。其次,COUNT()并不重要。@lulk Try edited version现在我获取所有团队及其成员(mitglieder),但我希望获取包含特定成员(mitglieder)的所有团队及其成员(mitglieder)@lulk我省略了
where
子句。现在试试。如果你知道mitglieder的id,那么从mitglieder开始,但是id不可靠,不应该在查询之外使用/知道。使用公共信息(如用户名)进行查找更好、更可靠。是的,还有count,因为我认为distinct不会计算重复:)