2016-06-08 57 views
1

我有三個表,用戶表,家庭表和family_relation表。用戶表具有所有成員,家庭表有兩列relation_id和relation_name。 Family_relation表有3列,member_id,second_member_id和relation_id。我無法加入3個表,其中一個加入了兩次列

在family_relation表中,我有這兩行,1,3和1,1,2和2,它們應該被翻譯成member_id - > 1 second_member_id - > 3,並且它們的關係已結婚。

下一行應該翻譯成成員1和成員2通過成爲兄弟姐妹相關。當我將這三個表連接在一起時,我需要將'member_id'轉換爲用戶表的名稱,但似乎無法將'second_member_id'轉換爲用戶表中的名稱。家庭餐桌也翻譯得很好。

此外,如果表的結構以及它們如何相關,請告訴我如何有一個有效的替代方案。

這裏是我的代碼

SELECT family_relation.*, users.firstName, '+ 
    ' family.relation FROM family_relation '+ 
    ' JOIN users ON users.id = family_relation.member_id'+ 
    ' JOIN family on family.id = family_relation.relation_id '+ 
    ' WHERE family_relation.member_id = ?'+ 
    ' UNION SELECT family_relation.*, users.firstName,'+ 
    ' family.relation FROM family_relation'+ 
    ' JOIN users ON users.id = family_relation.member_id'+ 
    ' JOIN family on family.id = family_relation.relation_id'+ 
    ' WHERE family_relation.second_member_id = ?' 

輸出:

[ RowDataPacket { 
member_id: 11, 
second_member_id: 40, 
relation_id: 2, 
firstName: 'Thomas', 
relation: 'Child' }, 
RowDataPacket { 
member_id: 11, 
second_member_id: 31, 
relation_id: 2, 
firstName: 'Thomas', 
relation: 'Child' }, 
RowDataPacket { 
member_id: 11, 
second_member_id: 42, 
relation_id: 1, 
firstName: 'Thomas', 
relation: 'Spouse' } ] 

我使用的是工會在這裏,因爲當用戶通過一個ID,也可能是second_member_id那等於傳遞ID的一個。輸出應該是這樣的,用戶傳遞一個id,循環遍歷table family_relation,然後輸出Thomas關係到黛安娜(已婚/孩子/兄弟等)或黛安娜有關托馬斯(已婚/孩子/兄弟等)。

+0

您可以發佈您的表的屏幕截圖和預期產出? –

回答

0

那是因爲你需要加入user表兩次,一次是member_id,一次是second_member_id

我不明白你的代碼是做什麼的,所以我就買只是它的第一部分:

SELECT family_relation.*, users.firstName,sec_u.first_name '+ 
    ' family.relation FROM family_relation '+ 
    ' JOIN users ON users.id = family_relation.member_id'+ 
    ' JOIN users sec_u ON sec_u.id = family_relation.second_member_id'+ 
    ' JOIN family on family.id = family_relation.relation_id '+ 
    ' WHERE family_relation.member_id = ?'+ 
+0

完美運作。非常感謝!! –