0

私はこのテーブル構造を持っています:

CREATE TABLE IF NOT EXISTS `person` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `father` text NOT NULL,
  `mother` text NOT NULL,
  `name` text NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

およびデータ:

(`ID`, `father`, `mother`, `name`)
( 1       ''        ''     'Robert Darwin'),
( 2       ''        ''     'Josiah Wedgwood'),
( 3       ''        ''     'Sarah Wedgwood'),
( 4       ''        ''     'Mary Howard'),
( 5       1         ''     'Erasmus Darwin'),
( 6       ''        ''     'Elizabeth Allen'),
( 7       2         3      'Josiah II'),
( 8       2         3      'Susannah Wedgwood'),
( 9       5         4      'Robert Waring Darwin'),
( 10      7         6      'Josiah III'),
( 11      7         6      'Emma Wedgwood'),
( 12      9         8      'Charles Robert'),
( 13      9         8      'Caroline Sarah Darwin'),
( 14      10        13     'Margaret Wedgwood'),
( 15      11        12     'William Erasmus');

私が必要としているのは、SPOUSEFIRST-DEGREE COUSINである人のリストを収集することです。

MySQL クエリの作成方法を教えてくれる人はいますか?

4

2 に答える 2

0

この質問は宿題のように聞こえますが、私は判断する人ではありません. 私はこれを私の心の練習としてやっています:

SELECT p1.father, p1.mother
FROM person p1
WHERE
    (p1.father, p1.mother) IN (
        SELECT firstSiblingChild.ID AS ID1, secondSiblingChild.ID AS ID2
        FROM (
            SELECT p1.ID AS ID1, p2.ID AS ID2
            FROM person p1
            INNER JOIN person p2 ON (p1.father = p2.father AND p1.mother = p2.mother)
            WHERE
                p1.father <> ""
            AND
                p1.mother <> ""
            AND
                p1.ID <> p2.ID
        ) siblings
        INNER JOIN person firstSiblingChild ON (siblings.ID1 = firstSiblingChild.father OR siblings.ID1 = firstSiblingChild.mother)
        INNER JOIN person secondSiblingChild ON (siblings.ID2 = secondSiblingChild.father OR siblings.ID2 = secondSiblingChild.mother)
    )
于 2013-06-04T16:06:41.847 に答える