MySQL SELECT查询WHERE"某些东西是真的"

时间:2015-09-18 11:21:41

标签: mysql

我有一个"用户"在我的数据库中的表,不幸的是它有很多混乱,我试图将它移动到新的。但确切的事情不是复制/粘贴整个。

以下是db的示例:

    -------*/*------------*/*------------*/*------------*/*------------*/*------------
      id        level          name           kind         status          parentId
    -------*/*------------*/*------------*/*------------*/*----------*/*------------
    EMD123F |     2        |   OrgName1   |     Org      |            |  rootID
    ---------------------------------------------------------------------------------
    DHAD781 |     3        |   UserName1  |    Person    |   active   |  EMD123F 
    ---------------------------------------------------------------------------------
    7AJIZU7 |     3        |   UserName2  |    Person    |   active   |  EMD123F 
    ---------------------------------------------------------------------------------
    DME123F |     2        |   OrgName2   |     Org      |            |  rootID
    ---------------------------------------------------------------------------------
    TT5451AL|     3        |   UserName3  |    Person    |   active   |  DME123F 
    ---------------------------------------------------------------------------------
    RRMI7481|     2        |   OrgName3   |     Org      |            |  rootID
    ---------------------------------------------------------------------------------
    PPUNSAD9|     2        |   OrgName4   |     Org      |            |  rootID
    ---------------------------------------------------------------------------------
    GJASDNZB|     3        |   UserName4  |    Person    |  inactive  |  PPUNSAD9
    ---------------------------------------------------------------------------------
    KJNSCZM7|     2        |   OrgName5   |     Org      |            |  rootID
    ---------------------------------------------------------------------------------
    1UZGOPAS|     3        |   UserName5  |    Person    |   deleted  |  KJNSCZM7
    ---------------------------------------------------------------------------------

你在这里看到有一些"组织"有0个用户,所以absolutley无用,有些组织有用户,但他们没有活动(不活动,删除...)。

我的问题是如何编写一个select语句来获取所有组织,其中有一个活跃的人。

RealData有点复杂,但我尝试这样的事情:

UPDATE users set org_status=1 WHERE (select count(STATUS) FROM users WHERE users.MEMBERKIND="Person" AND users.STATUS="Active" AND users.ROOTORGANIZATIONUSERID= users.ROOTORGANIZATIONIDCORRECTED)>0 AND MEMBERKIND = "Organization" AND LEVEL=2

我创建新行" org_status"并将其设置为NULL,然后我尝试更新它

2 个答案:

答案 0 :(得分:2)

select t1.*
from your_table t1
join your_table t2 on t2.parentId = t1.id
where t2.status = 'active'

答案 1 :(得分:1)

假设您只关心属于没有中间级别的组织的人员,那么您可以使用exists来获取组织:

select o.*
from users o 
where exists (select 1
              from users p
              where p.parentid = o.id and
                    o.kind = 'Org' and
                    p.kind = 'Person' and
                    p.status = 'active'
             );