[英]SQL joins and Subqueries , Subquery to SQL joins
我编写此SQL查询是为了获得不在邀请表中的用户的朋友,并且该函数可以正常工作,但是我读到子查询是性能消耗者,并且我对JOINS不太满意,将此查询修改为仅在其中的任何帮助加入将不胜感激。
这是SQL查询
SELECT friend.id,
friend.first_name
FROM friends AS friend
INNER JOIN friends_users AS friendsUser
ON ( friend.id = friendsUser.friend_id
AND friend.id NOT IN (SELECT friend_id
FROM friends_invitations
WHERE friends_invitations.user_id = 1) )
ORDER BY friendsUser.id ASC
这是表格结构
friends
id first_name
friends_users
id friend_id user_id
friends_invitations
id friend_id user_id
任何帮助将不胜感激
子查询不一定是性能消耗者,您的查询是否存在性能问题? 无论如何,大多数时候执行查询的最快方法是使用NOT EXISTS
:
SELECT friend.id,
friend.first_name
FROM friends AS friend
INNER JOIN friends_users AS friendsUser
ON friend.id = friendsUser.friend_id
WHERE NOT EXISTS (SELECT 1 FROM friends_invitations
WHERE friends_invitations.user_id = 1
AND friend_id = friend.id)
ORDER BY friendsUser.id ASC
这是一个链接,解释NOT IN
, LEFT JOIN
和NOT EXISTS
(对于SQL Server)之间的区别。 因此,测试此不同选项并为您的表选择正确的选项。
您可以为此使用LEFT JOIN
,
SELECT friend.id,
friend.first_name
FROM friends AS friend
INNER JOIN friends_users AS friendsUser
ON friend.id = friendsUser.friend_id
LEFT JOIN friends_invitations
ON friend.id = friends_invitations.friend_id AND
friends_invitations.user_id = 1
WHERE friends_invitations.friend_id IS NULL
ORDER BY friendsUser.id ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.