代码之家  ›  专栏  ›  技术社区  ›  Chathuranga Chandrasekara

多表SQL查询

  •  1
  • Chathuranga Chandrasekara  · 技术社区  · 14 年前

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

    我有两张这样的桌子。

    alt text

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

    现在我的要求如下。

    成员表中的状态为0。

    但是,如果选定的集合包含 有父母的孩子 状态=0,忽略子级并

    但C,D,E,F的父母都是0。

    我可以仅仅通过使用SQL和相关技术来做到这一点吗? (即在数据库层。我不想查询数据结构然后进行迭代。我可以为此编写一个查询吗?)

    2 回复  |  直到 4 年前
        1
  •  1
  •   gandjustas    14 年前
    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
    

    但我认为会有一个递归查询。

        2
  •  0
  •   bbadour    14 年前

    由于父级和子级都必须具有状态0才能被考虑,请允许我重新表述您的查询:

    返回状态为0且没有状态为0的父级的所有成员。

    有几种不同的方法可以像上面那样编写“notexists”查询。一个例子是:

    select *
    from Members
    where ID not in (
        select Child
        from Relationships r join Members m on r.Parent = m.ID
    )