我没有太多的SQL经验,所以我认为这不是一个愚蠢的问题。
我有2张这样的桌子。
A .. G是层次结构的成员。
现在我的要求如下。
我需要过滤掉那些成员 成员表中的状态= 0。
但是,如果所选集包含 有父母的孩子 status = 0,忽略孩子和 只选择父母。
例如,在上面的例子中,0状态的集合= {B,C,D,E,F,G} 但C,D,E,F的父母身份为0。 所以我的结果应该是{B,G}
我可以通过使用SQL和相关技术来实现吗?(即在数据库层。我不想查询数据结构然后迭代。我可以编写单个查询吗?此?)
如果问题令人困惑,我会再添加一些例子吗?
答案 0 :(得分:1)
select m.ID from Members m
left join Relations r on r.Child = m.Id
left join Members p on r.Parent = p.Id
where m1.Status = 0 and p.Status <> 0
但我认为会有一个递归查询。
答案 1 :(得分:0)
是的,你可以只用SQL做你需要的。
由于父母和孩子必须都要考虑状态0,所以让我重新解释一下你的问题:
返回状态为0且没有状态为0的父级的所有成员。
有几种不同的方法来编写如上所述的“不存在”查询。一个例子是:
select *
from Members
where ID not in (
select Child
from Relationships r join Members m on r.Parent = m.ID
)
如果你回归父母而不管身份如何,情况就会变得复杂一点,但事实并非如此。