gpt4 book ai didi

mysql - SQL 连接和子查询、子查询到 SQL 连接

转载 作者:行者123 更新时间:2023-11-29 14:00:43 24 4
gpt4 key购买 nike

我编写这个 SQL 查询是为了获取不在邀请表中的用户的 friend ,并且它会起作用,但是我读到子查询是性能消耗者,而且我不太擅长 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

Here is a link解释 NOT INLEFT JOINNOT EXISTS(对于 SQL Server)之间的差异。因此,请测试这些不同的选项并为您的表选择正确的选项。

关于mysql - SQL 连接和子查询、子查询到 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15113995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com