我有一个"用户"在我的数据库中的表,不幸的是它有很多混乱,我试图将它移动到新的。但确切的事情不是复制/粘贴整个。
以下是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 :(得分: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'
);