我需要找出Table_3是否包含属于某个父级的子级的所有兄弟姐妹。 例如,我询问孩子12(父母1 =查尔斯)。 Table_2告诉我他还有2个兄弟14和23.现在,我如何编写一个SQL代码来查明Table_3是否包含所有子节点,然后然后只是标记或对它做些什么?
表1
id | parent
1 | Charles
2 | Jack
表_2。
P_Id | chld_Id
1 | 12
1 | 14
1 | 23
2 | 7
2 | 13
表_3
chld_Id
5
7
12
16
14
23
25
编辑:格式化表格 我忘了提到我使用mySQL和PHP
答案 0 :(得分:0)
您可以通过以下方式获得12岁孩子的父母:
select tt2.parent from table_2 tt2 where tt2.child_id = 12;
你可以找到那些父母的其他孩子:
select t2.*
from table_2 t2
where t2.parent in (select tt2.parent from table_2 tt2 where tt2.child_id = 12);
您可以在table_3
中检查是否遗漏了这些内容:
select t2.*
from table_2 t2
where t2.parent in (select tt2.parent from table_2 tt2 where tt2.child_id = 12) and
not exists (select 1 from table_3 t3 where t2.child_id = t3.child_id);
答案 1 :(得分:0)
SELECT table_2.chld_Id
, SUM(
CASE WHEN table_3.chld_Id IS NULL
THEN 1
ELSE 0
END
) unfound_siblings
FROM table_2
JOIN ( select p_Id from table_2 where chld_Id = 7 ) parent ON ( table_2.p_Id = parent.p_Id )
LEFT JOIN table_3 ON ( table_2.chld_Id = table_3.chld_Id )
GROUP BY table_2.chld_Id
;
如果您想要父ID,就像您在另一条评论中所说的那样,只需将其添加到字段列表中,然后添加group by
。
sum
行,您可以, count(table_3.chld_Id) found_siblings
执行相反的操作