2013-02-07 132 views
1
Select 1 
from Friend 
where Friend.UserID = 1 
    and FriendID = (select User.UserID from User where UserName = 'friend_user'); 

我想要做的是檢查用戶是否與另一個用戶「朋友」。因此,當用戶導航到「foo.com/user/username」時,用戶名將被傳遞,這是我執行檢查時的情況。我寧願不使用兩個選擇,但似乎這是做到這一點的唯一方法。任何建議,以執行這樣的任務的最佳方式將不勝感激。是否可以將這2個select語句優化爲一個?

+0

你是**不**使用兩個選擇。你有一個選擇與一個共同相關的子查詢。使用現代數據庫管理系統(和一個體面的查詢優化器)的機會非常高,您的聲明和接受的解決方案的效率沒有差異。 –

回答

1

你可以使用一個JOIN來代替:

Select 1 
from Friend f 
join User u 
    on f.FriendID = u.UserID 
    and u.UserName = 'friend_user' 
where 
    f.UserID = 1; 
+0

這是有效的,但是如果我想從User表中選擇東西,比如Friends UserName等呢? – carboncomputed

+1

@ user979663使用'JOIN'時很容易。只需將這些字段添加到您的'SELECT'語句中,並以'u'表別名爲前綴。 –

+0

好吧,現在開始點擊哈哈 – carboncomputed

1

答到:「這工作,但如果我想從用戶表中選擇的東西,喜歡的朋友用戶名和這樣的 - ?」

Select u.username, count(f.friends) 
from Friend f 
join User u 
    on f.FriendID = u.UserID 
    and u.UserName = 'friend_user' 
where 
    f.UserID = 1; 
相關問題