1

私はかなり長い間、これについて頭を悩ませてきました。それでは、皆さんに質問する時が来ました。「fam」と呼ばれる次の (簡略化された) MySQL テーブルがあります。

+--------------+------------+------------+-----------+-----------+
+ Year         + ParentID1  + ParentID2  + ChildID1  + ChildID2  +
+--------------+------------+------------+-----------+-----------+
+ 1970         + 1111       + 2222       + 3333      + 4444      +
+ 1975         + 1111       + 3434       + 4545      + 5656      +
+ 1980         + 2222       + 3344       + 5566      + 6677      +
+ 1990         + 5656       + 3333       + 9090      + 0909      +
+ 1995         + 4444       + 5656       + 1010      + 1313      +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

私が基本的に達成したいのは、後で親になった子供の数を確認することです。私はこのようなことがうまくいくかもしれないと思った

SELECT COUNT(fam1.ChildID1)+COUNT(fam1.ChildID2) as `recruits`
FROM fam fam1
JOIN fam fam2
ON (fam1.ChildID1=fam2.ParentID1 OR fam1.ChildID1=fam2.ParentID2) 
OR (fam1.ChildID2=fam2.ParentID1 OR fam1.ChildID2=fam2.ParentID2) 

しかし、残念なことに、新兵は 8 人ではなく、3 人 (3333、4444、および 5656) しかいません。私が頭を悩ませる最大の問題は、ID が異なる列に表示される可能性があるという事実をどのように説明するかということです (たとえば、5656 は 1990 年の列 1 と 1995 の列 2 にあります)。

どんな提案でも大歓迎です!

4

2 に答える 2

1

これをチェックして

    select count(*) as `recruits` from
    (
     select  ChildID1 from fam
     where ChildID1 in 
     (select ParentID1 from fam 
       union 
      select ParentID2 from fam)
     union

     select ChildID2 from fam
     where ChildID2 in 
     (select ParentID1 from fam 
     union
     select ParentID2 from fam)

    )t;

デモ

于 2013-06-17T11:14:57.800 に答える