Mysql 子-父系谱-另一父的表

Mysql 子-父系谱-另一父的表,mysql,join,genealogy,Mysql,Join,Genealogy,我有一个名为“child_parent”的表,其中列出了孩子及其父母的ID,比如说,一个名为“person”的表。子-父对是唯一的,并且一个子项最多只能有两个父项 child parent 3 1 3 2 4 1 7 8 我想要一个“其他”父表(称之为“ChildOfpID_OtherParent”),其中包含所有父ID(pID)等于(比如)1的子项,如果另一个父项未列出,则为NULL。如果pID=1,我想: child_of_pID other_

我有一个名为“child_parent”的表,其中列出了孩子及其父母的ID,比如说,一个名为“person”的表。子-父对是唯一的,并且一个子项最多只能有两个父项

child  parent
3      1
3      2
4      1
7      8
我想要一个“其他”父表(称之为“ChildOfpID_OtherParent”),其中包含所有父ID(pID)等于(比如)1的子项,如果另一个父项未列出,则为NULL。如果pID=1,我想:

child_of_pID   other_parent
3              2
4              NULL

我很难弄清楚如何生成这样的表。

此查询将为您的示例返回正确的结果

SELECT p1.child as child_of_pID, p2.parent as other_parent 
FROM child_parent AS p1 
  LEFT JOIN child_parent p2 
  ON p1.parent <> p2.parent AND p1.child = p2.child
WHERE  p1.parent = 1;
选择p1.child作为\u pID的子\u,选择p2.parent作为其他\u父项
从作为p1的子项\父项
左联接子项\父项p2
在p1.parent上p2.parent和p1.child=p2.child
其中p1.parent=1;

效果很好-我必须更多地研究别名。我认为缺少AS,并将其推广到pID(=上例中的1),我将写:

SELECT p1.child as child_of_pID, p2.parent as other_parent 
FROM child_parent AS p1 
  LEFT JOIN child_parent AS p2 
  ON p1.parent <> p2.parent AND p1.child = p2.child
WHERE  p1.parent = pID;
选择p1.child作为\u pID的子\u,选择p2.parent作为其他\u父项
从作为p1的子项\父项
左键将子项与父项连接为p2
在p1.parent上p2.parent和p1.child=p2.child
其中p1.parent=pID;