Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL与同一表的成员的多对多关系_Sql_Postgresql - Fatal编程技术网

SQL与同一表的成员的多对多关系

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

我有一个跟踪兄弟姐妹的应用程序。有一个“成员”表。现在就这样。成员可以是彼此的“兄弟姐妹”。我想以某种方式跟踪“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 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()

这非常有效!除了我让会员匹配他们自己,这并不理想