Sql server 难以理解多对多递归的

Sql server 难以理解多对多递归的,sql-server,sql-server-2012,many-to-many,recursive-query,Sql Server,Sql Server 2012,Many To Many,Recursive Query,在过去的几个小时里,我一直在想如何输出每个父亲、母亲和他们所有的孩子 我知道如何单独显示一个组,如下所示 CREATE TABLE PERSON ( persID INT IDENTITY(1,1) PRIMARY KEY, persFName VARCHAR(30) NOT NULL, persLName VARCHAR(30) NOT NULL, persDOB DATE, motherID INT FOREIGN

在过去的几个小时里,我一直在想如何输出每个父亲、母亲和他们所有的孩子

我知道如何单独显示一个组,如下所示

CREATE TABLE PERSON
(
    persID      INT IDENTITY(1,1)   PRIMARY KEY,
    persFName   VARCHAR(30) NOT NULL,
    persLName   VARCHAR(30) NOT NULL, 
    persDOB     DATE,
    motherID    INT FOREIGN KEY REFERENCES person(persID),
    fatherID    INT FOREIGN KEY REFERENCES person(persID),
    persDOD     DATE,
    persGender  CHAR(1),
)

CREATE TABLE COUPLE
(
    coupleID    INT     IDENTITY(1,1)   PRIMARY KEY,
    alphaSpouse INT     NOT NULL    FOREIGN KEY REFERENCES person(persID),
    omegaSpouse INT     NOT NULL    FOREIGN KEY REFERENCES person(persID),
    coupleStart DATE    NOT NULL,
    coupleEnd   DATE,
)

但我一辈子都不知道如何将它们显示在一起(同时相互关联)。我使用交叉连接吗?全联盟

这只是一个连接,多次。它与
couple
表无关:

SELECT *
FROM person
WHERE persID IN (select fatherID from person
                    WHERE fatherID IS NOT NULL)

哇,真漂亮。非常感谢。我想我仍然无法理解如何正确使用连接。很难在网上找到好的sql server资源,
select (f.persFname + ' ' + f.persLname) as father,
       (m.persFName + ' ' + m.persLname) as mother,
       (c.persFName + ' ' + c.persLname) as child
from person c join
     person m  -- mother
     on c.motherid = m.persid join
     person f  -- father
     on c.fatherid = f.persid;