SQL与同一表的成员的多对多关系
我有一个跟踪兄弟姐妹的应用程序。有一个“成员”表。现在就这样。成员可以是彼此的“兄弟姐妹”。我想以某种方式跟踪“members”表中不同成员之间的关系。我试着这样做:SQL与同一表的成员的多对多关系,sql,postgresql,Sql,Postgresql,我有一个跟踪兄弟姐妹的应用程序。有一个“成员”表。现在就这样。成员可以是彼此的“兄弟姐妹”。我想以某种方式跟踪“members”表中不同成员之间的关系。我试着这样做: CREATE TABLE members ( id SERIAL PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL ); CREATE TABLE siblings ( member_one_id INTEGER R
CREATE TABLE members (
id SERIAL PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL
);
CREATE TABLE siblings (
member_one_id INTEGER REFERENCES members (id),
member_two_id INTEGER REFERENCES members (id),
PRIMARY KEY (member_one_id, member_two_id)
);
但我不知道如何质疑这个结构。我试过这个
SELECT * FROM members
INNER JOIN siblings
ON members.id = siblings.member_one_id OR members.id = siblings.member_two_id
INNER JOIN members
ON members.id = siblings.member_one_id OR members.id = sibling.member_two_id;
我不断地发现错误:
ERROR: table name "members" specified more than once
有没有一种方法既可以存储这种类型的关系,又可以有效地查询它?我的SQL知识随着这样更复杂的结构而变得越来越贫乏。谢谢 使用如下表别名:
SELECT * FROM members one
INNER JOIN siblings
ON one.id = siblings.member_one_id OR one.id = siblings.member_two_id
INNER JOIN members two
ON two.id = siblings.member_one_id OR two.id = sibling.member_two_id
桌子的结构看起来不错。您可以使用CTE遍历relationship()这非常有效!除了我让会员匹配他们自己,这并不理想