2015-10-05 47 views
1

我有一点疯狂的结构,我的数据库中,用户和orgniations都在同一个表(如下所示)MySQL的选择用另一个选择内部

他们都与PARENTID和MEMBERID连接,我需要得到的是: 获取所有 “人” 的name,他们MEMBERID以及他们父母的name

结果应该是这样的:表中的

UserName1 | DHAD781 | OrgName1 

例子:

下面是实例Db的样子:

-------*/*------------*/*------------*/*------------*/*------------*/*------------ 
    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结果发现

+1

我认为你换你的领域层次。你的查询选择所有用户,然后加入所有组织,所以't1'是用户,'t2'是组织(如果你有它的正常化)。因此,'t1.PARENTID'应该等于't2.MEMBERID',而不是相反。 –

回答

1

好像它是其他方式:

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' 

此外,选择明确的别名使查询更具可读性(且不易出错:))

+0

嗨@ X.L.Ant,谢谢你的回答,但是这也会给我返回nulll的结果。 – Andurit

+0

它适用于我刚添加的小提琴。 –

+0

看起来我拼错了一些东西(这只是示例数据,当我编辑它到真正的数据库我犯了一个错误:(对不起,感谢您的回答! – Andurit