是否可以将这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语句优化为一个?
你可以使用一个JOIN
来代替:
Select 1
from Friend f
join User u
on f.FriendID = u.UserID
and u.UserName = 'friend_user'
where
f.UserID = 1;
这是有效的,但是如果我想从User表中选择东西,比如Friends UserName等呢? – carboncomputed
@ user979663使用'JOIN'时很容易。只需将这些字段添加到您的'SELECT'语句中,并以'u'表别名为前缀。 –
好吧,现在开始点击哈哈 – 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;
你是**不**使用两个选择。你有一个选择与一个共同相关的子查询。使用现代数据库管理系统(和一个体面的查询优化器)的机会非常高,您的声明和接受的解决方案的效率没有差异。 –