2010-03-08 18 views
1

我已經堅持了近3小時內這個簡單的SQL查詢,我的心是拉坯。SQL查詢 - 堅持使用簡單的左加入

我有一個用戶表捕獲名USER_ID等 後來我有一個朋友表捕獲誰是誰的朋友,他們的狀態

用戶

USER_ID

朋友

friend_id
user_id說明
user_friend_id
狀態(accepeted,等待等)

我想要做的是 - 在用戶搜索時所記錄的名字說:「約翰」 - 在網站上顯示的所有嫖客的名單,相鄰的約翰 - 做一個查找與朋友表,看是否存在記錄 - 即如果登錄用戶是任何的約翰

  • 朋友如果存在顯示當前狀態
  • 如果它不存在然後顯示「添加朋友」

所以我應該首先運行像用戶選擇user_ID的地方名稱,如「約翰%」上的用戶表的查詢,然後使用這些ID和運行它們友表。

我沒有能夠得到它。 感謝

+0

哎MDM - 這是我在做什麼,到目前爲止 - 運行一個單獨的查詢,以便從用戶表 得到user_ud的名字,像約翰 - 然後檢查每個這些user_id與朋友表,看看他們中的任何人是否是已登錄用戶的朋友 這有效,但我想如果有一個單一的查詢,我可以編寫來實現這一點 - 返回每個user_id約翰名稱 - 與登錄用戶的友誼狀態是什麼,如果他們不是fr,則爲null iends – Gublooo 2010-03-08 10:20:27

回答

2

開始時你有符合您的繞圈所有用戶(我不知道確切的MySQL的句法):

SELECT u.user_id 
FROM User u 
WHERE u.name LIKE '%John%' 

這給你所有的目標用戶。接下來,你要在那裏你限制的結果對Friend表的外連接當前登錄的用戶:

SELECT u.user_id, f.status 
FROM user u 
LEFT OUTER JOIN Friend f ON f.friend_id = u.user_id 
WHERE f.user_id = <currentUserId> AND u.name LIKE '%John%' 

你得到的是具有名爲John的用戶的用戶ID和狀態標誌的結果集即爲null或實際狀態。如果它是空的,你有一個潛在的新朋友,如果沒有,你有一個現有的朋友。

+0

謝謝 - 你提供的解釋很清楚我出錯的地方。 – Gublooo 2010-03-08 11:13:02

+0

+1必須同意。 – 2010-03-08 11:30:13

1

像這樣的東西可能讓你開始。

SQL語句

SELECT u.name, COALESCE(f.Status, 'Add Friend') 
FROM User u 
     LEFT OUTER JOIN Friend f ON f.User_ID = u.User_ID 
WHERE u.name = 'John' 
1

下面的查詢必須解決您的問題

select a.user_name,case when a.user_name like 'John%' then b.status else 'Add Friend' end case from users_det a,friend b where a.user_id = b.user_id