首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自多个子查询的GROUP_CONCAT?

来自多个子查询的GROUP_CONCAT?
EN

Stack Overflow用户
提问于 2010-12-16 00:02:52
回答 1查看 480关注 0票数 0

我似乎不知道这是为了我的生命:x

我有两张桌子。

  • 1 =标记链接
  • 2 = Tag Data

当我查询一个概要文件时,每个概要文件可以在标记链接表中有多个条目。检索标记链接后,我希望从标记数据表中获取标记文本。

我可以用:SELECT * FROM platform.tagWords WHERE tagId IN (SELECT tagId FROM platform.user sProfilesTags WHERE userId = 1001)

但是它会遍历每个标记(大约5万),然后检查是否分配给用户,所以这并不完全是一个解决方案,因为每个查询需要5-8秒。

有办法扭转这种局面吗?

任何建议或建议都将不胜感激。

提前感谢!

*最新情况

所以我试着试着加入,但我也被困在那里了

代码语言:javascript
复制
SELECT                                                                          

  GROUP_CONCAT(tagWords.tagWord SEPARATOR ', ') AS tags,                        
  usersProfiles.*                                                                

FROM platform.users u                                                          

INNER JOIN platform.usersProfilesTags ON usersProfilesTags.userId = u.userId   
INNER JOIN platform.usersProfiles ON usersProfiles.userId = u.userId           
INNER JOIN platform.tagWords ON tagWords.tagId = usersProfilesTags.tagId       

WHERE u.userName = 'mattstest'
EN

回答 1

Stack Overflow用户

发布于 2010-12-16 00:31:56

您的第一个查询看起来很好。如果要花费5-8秒,那么您可能在usersProfilesTags(userId)上缺少一个索引。

尝试在一个查询中执行此操作比执行两个单独的查询要困难,而且可能要慢:一个查询用于获取概要文件,另一个查询用于获取标记。通常,当您运行多个简单查询而不是一个大型复杂查询时,MySQL工作得最好。子查询是一个相对较新的特性,通常性能很差。

还请注意,您缺少了一个用于GROUP BY查询的GROUP_CONCAT()。您需要在userProfiles列表中列出GROUP BY中的每一列。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4456257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档