2015-10-05 40 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