2014-05-19 30 views
0

我有三個表,用戶/團隊/ user_team(多到多)如何獲得另一個表的字段信息

user 
----------- 
id name 
1 Tom 
2 Jerry 
3 John 

team 
------------ 
id name 
1 t1 
2 t2 
3 t3 

user_team 
--------------------- 
userid teamid isdeleted 
1  t1  0 <----(0 means not deleted record, which can be searched out) 
2  t2  1 <----(1 means deleted record, which can not be searched out) 

我希望得到像下面

與相關的用戶信息的所有球隊記錄的信息
-------------- 
tid tname username 
1 t1  Tom 
2 t2  
3 t3 

你能告訴我如何寫sql語句嗎?

對不起,我的錯。我已經更新了我的問題,在團隊表中添加了更多記錄t3。

+1

你有沒有嘗試過的東西這麼遠嗎? –

+0

@ChristianMark是的,我試圖從書中搜索一些信息,但我什麼都沒有。你能幫忙嗎?提前致謝。 – user2574853

+0

非常感謝您的所有意見。我是Stackoverflow的新手,不確定我是否可以將多個響應標記爲答案。 – user2574853

回答

0

試試這個:

Select a.id as tid 
a.name as tname 
b.name as username 
from team a 
LEFT JOIN user_team c on a.name = c.teamid and c.isdeleted = 0 
LEFT JOIN user b on b.id = c.userid 
+0

你answser工程。非常感謝! – user2574853

0

試試看。看到這裏http://sqlfiddle.com/#!2/d918a/2

select t.id as tid, 
t.name as tname, 
case when ut.isdeleted = 0 then u.name else '' end as username 
from team t 
left join user_team ut 
on t.name = ut.teamid 
left join user u 
on ut.userid = u.id; 

演示小提琴,這將導致在

enter image description here

+0

我的錯誤。我已經通過在團隊表中添加更多記錄t3更新了我的問題,可以更新您的sql嗎?用現有的sql t3不能搜索出來。 – user2574853

+0

@ user2574853,你只需要做一個左連接而不是內連接。編輯我的答案。 – Rahul

0

試試這個:

  SELECT t.id tid, t.name tname, GROUP_CONCAT(u.name) usernames 
      FROM user_team ut 
LEFT OUTER JOIN team t ON ut.teamid = t.id 
LEFT OUTER JOIN user u ON ut.userid = u.id 
     GROUP BY t.id; 

要包含可被搜索出來的標誌試試這個(只包括標誌的條件):

  SELECT t.id tid, t.name tname, GROUP_CONCAT(u.name) usernames 
      FROM user_team ut 
LEFT OUTER JOIN team t ON ut.teamid = t.id 
LEFT OUTER JOIN user u ON ut.userid = u.id 
      AND ut.isdeleted = 1 --this will add a condition for deleted teams 
     GROUP BY t.id; 
+0

感謝您的回答,但我不想在sql語句中添加函數,因爲它可能會影響性能。 – user2574853

+0

是的,但結果會更準確。你可以試試。:) –

+0

我的錯誤。我已經通過在團隊表中添加更多記錄t3更新了我的問題,可以更新您的sql嗎? – user2574853

0

我想你要尋找的是一個簡單的OUTER JOIN

select t.id as tid, 
    t.name as tname, 
    u.name as username 
from team t 
    left join user_team ut on t.id = ut.teamid and ut.isdeleted = 0 
    left join user u on ut.userid = u.id 

A Visual Explanation of SQL Joins

+0

用戶名字段顯示爲空。 – user2574853

+0

您提供的鏈接非常有用。謝謝。 – user2574853

相關問題