SQL:显示children和brothers/sisters
SQL: display children and brothers/sisters
我有一个数据库,主要存储由多个家庭组成的家谱。
我有两个表:
- "persons": id, name, lname
- “关系”:parent、child
显示所有 parent 没问题,我这样做了:
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;
但是我怎样才能全面显示每个 child 及其各自的 brothers/sisters?
我在 select 中尝试了 select,但它不起作用:
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;
对于来自其他 table 的名称,您需要更多连接:
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;
我有一个数据库,主要存储由多个家庭组成的家谱。
我有两个表:
- "persons": id, name, lname
- “关系”:parent、child
显示所有 parent 没问题,我这样做了:
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;
但是我怎样才能全面显示每个 child 及其各自的 brothers/sisters?
我在 select 中尝试了 select,但它不起作用:
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;
对于来自其他 table 的名称,您需要更多连接:
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;