2017-12-22 25 views
2

私は一日中、この問題を把握しようとしてきたが、私はテーブルを作成し、この質問の母親ですMYSQL 1:M再帰関係

を答えるでしょうSelectステートメントをしようとしてきましたシンプソンズの家系図では?最も古いものから最も若いものまでをリストアップしてください。

私の現在のデータでは、1つのテーブルでこれをどうやって行うのか分かりません。

CREATE TABLE person 
(
persID   INT IDENTITY(1,1), 
persFName  VARCHAR(40) NOT NULL, 
persLName  VARCHAR(40) NOT NULL, 
persGender  CHAR(1) NOT NULL, 
persDOB   DATE NOT NULL, 
persDOD   DATE , 
fatherID   INT , 
motherID   INT , 

CONSTRAINT pk_person_persID PRIMARY KEY(persID), 
CONSTRAINT fk_person_fatherID FOREIGN KEY (fatherID) REFERENCES person(persID), 
CONSTRAINT fk_person_motherID FOREIGN KEY (motherID) REFERENCES person(persID), 


); 

は、そして、これは私のデータ

INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Abraham', 'Simpson', 'M', '1944-01-15', '2015-07-21',NULL,NULL) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Mona', 'Simpson', 'F', '1946-09-22', NULL,NULL,NULL) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Herb', 'Simpson', 'M', '1963-11-21',NULL,1,2) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Homer', 'Simpson', 'M', '1965-05-19',NULL,1,2) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Clancy', 'Bouvier', 'F', '1945-02-12',NULL,NULL,NULL) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Jackie', 'Bouvier', 'M', '1945-12-01','2016-05-15',NULL,NULL) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Marge', 'Simpson', 'F', '1966-05-18',NULL,6,5) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Patty', 'Bouvier', 'F', '1964-01-08',NULL,6,5) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Selma', 'Bouvier', 'F', '1969-03-01',NULL,6,5) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Bart', 'Simpson', 'M', '1990-01-01',NULL,4,7) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Lisa', 'Simpson', 'F', '1992-05-15',NULL,4,7) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Maggie', 'Simpson', 'F', '1997-11-28',NULL,4,7) 
INSERT INTO person(persFName,persLname,persGender,persDOB,persDOD,fatherID,motherID) VALUES ('Ling', 'Bouvier', 'M', '2000-04-02',NULL,NULL,9) 
+0

は母の属性に基づいてエントリを選択し、[生年月日に基づいて結果を並べ替えますlines--。 また、適切なデータベースが選択されていることを確認します。それ以外の場合は、select文がエラーをスローします。 –

+1

このMySQLまたはMS SQL Serverはありますか?あなたのタイトルはあなたのタグをもう一方のタグと言います。 – alroc

答えて

0

これは、あなたが探しているものをあなたに与えるべきであるが、私はそれが賢いやり方であればわかりません!私はこの助けを願っている。

SELECT DISTINCT T2.motherID, 
        T1.persID, 
        T1.PersFName, 
        T1.PersLName, 
        T1.PersGender, 
        T1.PersDOB, 
        T1.PersDOD, 
        T1.FatherID, 
        T1.MotherID 
    FROM person AS T1 
    LEFT JOIN person AS T2 ON T1.persID = T2.motherID 
    WHERE T2.motherID IS NOT NULL 
    AND T1.persLName = 'Simpson' 
    ORDER BY T1.persDOB 
0

これを試してみてください:

SELECT * 
FROM person 
WHERE persID IN (SELECT DISTINCT motherID FROM person) 
    AND persLNAme = 'Simpson' 
ORDER BY persDOB ASC; 

アイデアがベーステーブルからそれらを抽出するために、すべての母親のIDを取得することであると。次に、ORDER BY句を使用して結果をソートします。あなたはこれらに沿って何かをしたいと思う

enter image description here