gpt4 book ai didi

mysql 三重连接查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:33 24 4
gpt4 key购买 nike

我有如下所示的表格:

    users table
user_id user_email user_name
1 a@a.com a
2 b@b.com b
3 c@c.com c

bookmarks table
bookmark_id user_id bookmark_url
1 1 http://aaa.com
2 3 http://bbb.com
3 3 http://ccc.com
4 3 http://ddd.com

comments table
comment_id user_id content
1 2 'hello'
2 2 'hello2'

我想要得到的是这样的:

user_id  user_email  user_name bookmarksCount commentsCount
1 a@a.com a 1 0
2 b@b.com b 0 2
3 c@c.com c 3 0

从上面看,每个xxx_id都是自动递增的序列id。

我认为要获得以上结果,我必须加入这 3 个表。但是,如果书签和评论表中没有匹配的 user_id,则无法加入它们。但是如果没有匹配项,我必须得到 0 的结果。

即使没有匹配列,是否可以连接这些表以获得结果?

最佳答案

您可以只使用相关子查询:

select u.*,
(select count(*) from bookmarks bm where bm.user_id = u.user_id
) as cnt_bookmarks,
(select count(*) from comments c where c.user_id = u.user_id
) as cnt_comments
from users u;

如果您尝试使用 join 执行此操作,您将会遇到问题,因为您将为每个用户生成书签和评论的笛卡尔积。此外,在 join 之后进行聚合很可能会导致性能问题,因为聚合的数据会比需要的更大。

对于此查询,bookmarks(user_id)comments(user_id) 上的索引应该提供非常好的性能。

关于mysql 三重连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40808655/

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