SQL查询多个表

时间:2010-09-21 08:05:13

标签: sql sql-server algorithm

我没有太多的SQL经验,所以我认为这不是一个愚蠢的问题。

我有2张这样的桌子。

alt text

A .. G是层次结构的成员。

现在我的要求如下。

  

我需要过滤掉那些成员   成员表中的状态= 0。

     

但是,如果所选集包含   有父母的孩子   status = 0,忽略孩子和   只选择父母。

例如,在上面的例子中,0状态的集合= {B,C,D,E,F,G} 但C,D,E,F的父母身份为0。 所以我的结果应该是{B,G}

我可以通过使用SQL和相关技术来实现吗?(即在数据库层。我不想查询数据结构然后迭代。我可以编写单个查询吗?此?)

如果问题令人困惑,我会再添加一些例子吗?

2 个答案:

答案 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
)

如果你回归父母而不管身份如何,情况就会变得复杂一点,但事实并非如此。