2010-11-22 106 views
6

我有兩個表,分別命名爲useruserFriend。我想要用戶表中的所有用戶,以及來自userFriend表的特定成員。然後,我想加入他們兩個......如何寫有條件的左連接

user 
userID userName 
1   aaa 
2   bbb 
3   ccc 
4   ddd 
5   eee 

userFriend 
userFriendID userID friendUserID 
1    1  2 
2    2  3 
3    1  4 
4    4  2 

所以,如果我的用戶ID = 1, 後來我想導致像

userID userName userFriendID friendUserID  
2   bbb  1   2 
3   ccc  NULL  NULL 
4   ddd  3   4 
5   eee  NULL  NULL 

所以這樣我想有條件的第二個表,我只需要使用左連接加入第一個表具有userID = 1的第二個表。

+0

您可以更好地佈局您的代碼(使用格式幫助)。在這一刻,似乎你有userID,userFriendID和friendUserID,而我相信你只需要兩個ID。 – Gidon 2010-11-22 07:21:44

+0

您可以發佈您的datamodel?我相信這樣的要求意味着那裏有一個問題。 – 2011-09-22 11:54:50

+0

檢出http://stackoverflow.com/questions/1255492/conditional-join-in-mysql – Singleton 2010-11-22 07:19:32

回答

0

對於你想要的東西,你不需要從兩個表中查詢。只要使用userFriend會給你數據。您只需要名稱的用戶表。

SELECT DISTINCT userID FROM userFriend 
WHERE friendUserID = ? 

這會給你所有擁有你需要的特定朋友的用戶。 您也可以選擇添加INNER JOIN,看看哪些名字:

SELECT DISTINCT f.userID, u.name 
FROM userFriend f 
INNER JOIN users u ON u.userID = f.userID 
WHERE friendUserID = ? 

UPDATE 有關結構的意見。你不需要userFriendID。用戶ID和朋友ID的組合可以成爲你的鑰匙。

更新查詢

SELECT * FROM users u 
LEFT JOIN userFriend f on u.userID = f.userID 
WHERE f.friendUserID = ? 

的這將返回你有朋友X的左連接所有用戶是不是在此查詢重要。這個特定的條件使它無關緊要。

爲了得到你想要的東西,你需要執行此操作。

SELECT * FROM users u 
LEFT JOIN (
    SELECT DISTINCT * FROM userFriend f 
    WHERE friendID = 4 
) x ON u.id = x.userId 

它可以使用子查詢完成,但我不認爲是組織您的表最合乎邏輯的方式。

4

這是一個非常規的事情要求...但這會給你你想要的結果。

SELECT u.userID, u.userName, uf.userFriendID, uf.friendUserID 
FROM user u 
LEFT JOIN userFriend uf ON u.userID = uf.friendUserID AND uf.userID =1 
WHERE u.userID !=1