MySQL选择“某物为真”的查询
我的数据库中有一个users表,不幸的是其中有很多混乱,我试图将其移动到新的表中。但只是精确的东西,而不是复制/粘贴整个 下面是db的外观示例:MySQL选择“某物为真”的查询,mysql,Mysql,我的数据库中有一个users表,不幸的是其中有很多混乱,我试图将其移动到新的表中。但只是精确的东西,而不是复制/粘贴整个 下面是db的外观示例: -------*/*------------*/*------------*/*------------*/*------------*/*------------ id level name kind status parentId --
-------*/*------------*/*------------*/*------------*/*------------*/*------------
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个用户,因此毫无用处,有些组织有用户,但他们不是活动的,非活动的,已删除的
我的问题是如何编写一个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,然后尝试更新它假设您只关心属于没有中间级别的组织的人员,那么您可以使用exists获取组织:
select t1.*
from your_table t1
join your_table t2 on t2.parentId = t1.id
where t2.status = 'active'
请提供您迄今为止尝试过的查询。但是子选择应该可以工作,我想是未经测试的:SELECT*FROM orgaTable,其中SELECT count*FROM orgaTable作为users,其中users.parentId=orgaTable.id>0;可能是重复的嘿,对不起,如果我把你搞糊涂了,但是没有两张桌子,只有一张atmYes。我在查询中使用不同的别名t1和t2两次加入同一个表your_表嘿,感谢这一点,我尝试了多次,不幸的是,我没能得到成功的结果。我只有24排,其余几千排都丢了。从逻辑上看,这看起来不错,所以我不知道哪里有问题,也许你可以建立一个最小的例子,然后我们可以看到问题是什么。嘿,对不起,如果我混淆了你,但没有2个表,它只是一个atm@Andurit . . . 此查询仅引用一个表。
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'
);