首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用mysql中三个表的另一个子查询中的子查询?

如何使用mysql中三个表的另一个子查询中的子查询?
EN

Stack Overflow用户
提问于 2013-08-31 08:52:16
回答 2查看 20.5K关注 0票数 4

我的数据库中有三个表,请参见下面的结构:

用户

代码语言:javascript
复制
uid | fname | date_joined
---------------------------------
 1  | john  | 2013-08-25 01:00:00
 2  | rock  | 2013-08-26 01:00:00
 3  | jane  | 2013-08-27 01:00:00

问题

代码语言:javascript
复制
qid | uid 
---------- 
 1  |  1   
 2  |  1   
 3  |  2   
 4  |  3   
 5  |  3   
 6  |  1   
 7  |  1   
 8  |  2   
 9  |  2   

追随者

代码语言:javascript
复制
fid | qid
---------
 1  |  2
 2  |  1
 3  |  2
 4  |  1
 5  |  2
 6  |  3
 7  |  2

user表包含所有与用户相关的字段。

“问题”表包含所有具有外键uid的问题相关数据。

“追随者”表存储以下问题的次数的信息。

我希望返回的查询是:

代码语言:javascript
复制
unique uid, 
fname
question count for each user
follower count for each user

我已经编写了一个查询,它可以正常工作,并按我的要求返回记录,但是关注者计数始终是0。以下是我的疑问:

代码语言:javascript
复制
SELECT 
    u.uid, u.fname, u.date_joined , 
    (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
    (SELECT COUNT(*) FROM followers WHERE followers.qid IN ( 
        SELECT GROUP_CONCAT(qid) FROM questions WHERE questions.uid = u.uid 
        ) 
    ) AS follow_count
FROM epc_user AS u
ORDER BY follow_count DESC, question_count DESC, date_joined DESC

我尝试了几种不同的组合,但它们都不起作用,可能是我写错了查询,也可能是不可能在另一个子查询中使用子查询,不管它是什么。我只想知道它是否可能,如果可能

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-31 09:28:25

GROUP_CONCAT将返回一个字符串,但IN运算符使用的是(一组值),而不是字符串,因此您必须使用以下内容

代码语言:javascript
复制
   SELECT 
        u.uid, u.fname, u.date_joined , 
        (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
        (SELECT COUNT(*) FROM followers WHERE followers.qid IN ( 
            SELECT qid FROM questions WHERE questions.uid = u.uid 
            ) 
        ) AS follow_count
    FROM users AS u
    ORDER BY follow_count DESC, question_count DESC, date_joined DESC

小提琴:http://sqlfiddle.com/#!2/8cd10/2

票数 3
EN

Stack Overflow用户

发布于 2013-08-31 09:33:48

您可以使用联接来获得结果。不需要子查询:

代码语言:javascript
复制
select 
  u.uid, 
  u.fname, 
  u.date_joined, 
  count( distinct q.qid ) as 'question_count', 
  count( distinct f.fid ) as 'follower_count'
from users u
  left join questions q on q.uid = u.uid
  left join followers f on f.qid = q.qid
group by u.uid, u.fname, u.date_joined
order by follower_count desc, question_count desc, date_joined desc;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18546327

复制
相关文章

相似问题

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