【问题标题】:SQL: display children and brothers/sistersSQL:显示孩子和兄弟/姐妹
【发布时间】:2021-07-03 11:45:36
【问题描述】:

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

我有两张桌子:

  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;

我认为我走错了路。

感谢您的帮助。

【问题讨论】:

    标签: sql foreign-keys inner-join


    【解决方案1】:

    如果我理解正确,这只是一个自我加入:

    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;
    

    【讨论】:

    • 非常感谢。我正在尝试编辑您的代码,以便它检索名称而不是 id。到了那里我会回来找你的。
    • 谢谢!我需要分析你的代码,因为我当然还没有得到它,但这就是我所需要的,这样我就可以理解它是如何工作的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多