2014-04-01 101 views
0
1) user- id | nickname 
      5 hello 
      6 ouuu 
      7 youyou 

2) team_leader- id | user_id | team_name | game |position 
        2  5  haha  M.A  Leader 
        3  7  nono  M.A  Leader 

3) team_member- id | user_id | team_leader_id| game |position 
        1  6   2   M.A Member 


4) user_game- id | user_id | game | character_game 
        1  5  M.A  wahaha 
        2  6  M.A  kiki 
        3  7  M.A  popo 

我想顯示team_leader的id其中id = 2 所以輸出應該顯示:
暱稱 漢字名稱   位置
你好                      wahaha                        領袖
ouuu                          奇奇                                 會員SQL連接4臺

+1

你是什麼意思? – MSadura

+0

表示結果錯誤 – Just4Fun

+0

'select *'不''select *' –

回答

0

首先,你應該從來沒有在查詢中使用的* ,只要他們不只是暫時的測試目的。即使一切按預期工作,它也可能在以後導致意想不到的錯誤,例如,當表格模式改變時。始終明確列出您希望包含在查詢中的字段。

與您的查詢的問題是,您在聯接表中有名稱衝突。每個表都有一個id字段,因此您必須使用別名並通過限定名稱來解決它們,以便能夠清楚地區分它們。

SELECT u.id, u.nickname, t.id, t.user_id, t.team_name, t.game, 
    tm.id, tm.user_id, tm.team_id, ug.id, ug.user_id, ug.game, ug.character_game 
    FROM user AS u 
    JOIN user_game AS ug 
    ON ug.user_id = u.id 
    JOIN team AS t 
    ON t.user_id = u.id 
    JOIN team_member AS tm 
    ON t.id = tm.team_id 
    WHERE t.id = 2 AND ug.game = t.game 
    AND tm.team_id = 2; 

BTW:如果您的應用程序的設計讓用戶可以只對「子表」引用user_ID的,甚至沒有人的一部分,你應該考慮使用LEFT OUTER JOIN的。這將確保每個用戶在結果中都有一排,甚至那些不是團隊成員的人,例如

SELECT u.id, u.nickname, t.id, t.user_id, t.team_name, t.game, 
    tm.id, tm.user_id, tm.team_id, ug.id, ug.user_id, ug.game, ug.character_game 
    FROM user AS u 
    LEFT OUTER JOIN user_game AS ug 
    ON ug.user_id = u.id 
    LEFT OUTER JOIN team AS t 
    ON t.user_id = u.id 
    LEFT OUTER JOIN team_member AS tm 
    ON t.id = tm.team_id 
    WHERE t.id = 2 AND ug.game = t.game 
    AND tm.team_id = 2; 
0
select * from user u 
inner join team t on u.id = t.user_id 
inner join team_member tm on t.user_id = tm.user_id 
inner join user_game ug on t.user_id = ug.user_id and t.game = ug.game where tm.team_id = 2 

支付你的注意力瘦SQL 加入

0

試試這個:

SELECT 
a.nickname, 
b.position, 
c.character_game 
FROM user a 
INNER JOIN team_leader b ON b.user_id=b.id 
INNER JOIN user_game c ON c.id=c.user_id 
WHERE a.id=5 OR a.id=6 
+0

@ Just4Fun,看看我的新答案.. – jmail

+0

@你給定的輸入無效... – jmail