MySQL SELECT中包含另一个SELECT
我的数据库中有一个有点疯狂的结构,其中用户和组织位于同一个表中(下面的示例) 它们都与PARENTID和MEMBERID连接,我需要得到的是: 获取所有“个人”的MySQL SELECT中包含另一个SELECT,mysql,Mysql,我的数据库中有一个有点疯狂的结构,其中用户和组织位于同一个表中(下面的示例) 它们都与PARENTID和MEMBERID连接,我需要得到的是: 获取所有“个人”的姓名,他们的成员ID,以及父母的姓名 结果应该如下所示: UserName1 | DHAD781 | OrgName1 -------*/*------------*/*------------*/*------------*/*------------*/*------------ MEMBERID le
姓名
,他们的成员ID
,以及父母的姓名
结果应该如下所示:
UserName1 | DHAD781 | OrgName1
-------*/*------------*/*------------*/*------------*/*------------*/*------------
MEMBERID 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
---------------------------------------------------------------------------------
表格示例:
下面是db的外观示例:
UserName1 | DHAD781 | OrgName1
-------*/*------------*/*------------*/*------------*/*------------*/*------------
MEMBERID 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
---------------------------------------------------------------------------------
我尝试的是:
SELECT t1.NAME, t1.MEMBERID
FROM roles t1
inner join roles t2 on t2.PARENTID = t1.MEMBERID
WHERE t1.kind= 'Person'
我从这个查询中得到:
发现0个结果似乎情况正好相反:
SELECT persons.NAME, persons.MEMBERID, orgs.NAME, orgs.MEMBERID
FROM roles persons
INNER JOIN roles orgs on persons.PARENTID = orgs.MEMBERID
WHERE persons.kind = 'Person'
此外,选择显式别名可以使查询更具可读性(并且更不容易出错:)
- 看
t1
是用户,t2
是组织(如果您已正确规范化)。因此,t1.PARENTID
应该等于t2.MEMBERID
,而不是相反。嘿@X.L.Ant,谢谢你的回答,不过这也会返回空值结果。看起来我拼错了一些东西(这只是示例数据,当我将其编辑为real DB时,我犯了一个错误:(抱歉,谢谢你的回答!