微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL:显示孩子和兄弟/姐妹

如何解决SQL:显示孩子和兄弟/姐妹

我有一个数据库,基本上存储了由几个家庭组成的家谱。

我有两张桌子:

  1. "persons": id,name,lname
  2. “关系”:父母、孩子

显示所有父母没问题,我是这样做的:

SELECT disTINCT p.fname,p.lname
FROM persons p
INNER JOIN relationships ON p.id = relationships.p
INNER JOIN persons c ON c.id = relationships.c;

但是我怎样才能全面地展示每个孩子及其各自的兄弟/姐妹?

我在很多东西的一个选择中尝试了一个选择,但它不起作用:

SELECT disTINCT 
    c1.name,c1.lname,(
    SELECT 
        c2.firstname,c2.lastname 
    FROM 
        persons p2 
    INNER JOIN relations  ON p2.id = relations.parent 
    INNER JOIN persons c2 ON c2.id = relations.child
    WHERE 
        p.id = p2.id
    ) 
FROM 
    persons p
INNER JOIN relations  ON p.id  = relations.parent 
INNER JOIN persons c1 ON c1.id = relations.child;

我认为我走错了路。

感谢您的帮助。

解决方法

如果我理解正确,这只是一个自连接:

select r.child,r2.child as sibling
from relationships r join
     relationships r2
     on r.parent = r2.parent and
        r.child <> r2.child
order by r.child,r2.child;

对于来自另一个表的名称,您需要更多连接:

select p.*,p2.*
from relationships r join
     relationships r2
     on r.parent = r2.parent and
        r.child <> r2.child join
     persons p
     on p.id = r.child join
     persons p2
     on p2.id = r2.child
order by r.child,r2.child;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。