是否可以将这2个select语句优化为一个?

问题描述:

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

你是**不**使用两个选择。你有一个选择与一个共同相关的子查询。使用现代数据库管理系统(和一个体面的查询优化器)的机会非常高,您的声明和接受的解决方案的效率没有差异。 –

你可以使用一个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

答到:“这工作,但如果我想从用户表中选择的东西,喜欢的朋友用户名和这样的 - ?”

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;