2015-09-18 69 views
1

我在我的数据库中有一个“users”表,不幸的是里面有很多乱七八糟的东西,我试着将它移到新的一个。但只是确切的事情不复制/粘贴整个。MySQL SELECT查询WHERE“东西是真的”

下面是实例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之后,我尝试更新它

+0

请提供您到目前为止尝试过的查询/查询。但一个子选择应该工作,我猜(未经测试):'SELECT * FROM orgaTable WHERE(从orgaTable AS用户选择count(*)WHERE users.parentId = orgaTable.id)> 0;' –

+0

可能的重复[如何创建MySQL分层递归查询](http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query) – vhu

回答

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

嘿,我很抱歉,如果我混淆你,但没有2个表,这只是一个atm – Andurit

+0

是的。我在查询中加入同一个表('your_table')两次,使用不同的别名't1'和't2' –

+0

嘿,谢谢你的观点,我多次尝试它,很不幸,我无法获得成功的结果。我只有24行休息几千失去。 Logicaly这看起来不错,所以我不知道哪里是aproblem – Andurit

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' 
      ); 
+0

嘿,我很抱歉,如果我混淆你,但没有2个表,它只是一个atm – Andurit

+0

@Andurit。 。 。此查询仅涉及一个表。 –