我现在已经用了很长一段时间来改变我的大脑。所以是时候问你们了。我有以下(简化的)MySQL表名为'fam':
+--------------+------------+------------+-----------+-----------+
+ 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列)。
任何建议都将不胜感激!
答案 0 :(得分:1)
这很容易,你只需要检查一个孩子是否已成为父母......并且因为每个家庭有两个孩子,你需要做两次(一次为孩子一次,另一次为孩子两次)你应该有所有成为父母的孩子的名单。在列表中列出它们之后,您只需要计算它们,看不需要复杂化容易的事情;)
select count (*) from
(
select child1 from fam
where child1 in
(select parent1 from fam
union
select parent2 from fam)
union
select child2 from fam
where child2 in
(select parent1 from fam
union
select parent2 from fam)
);
答案 1 :(得分: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;