首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql选择交叉引用3个表

Mysql选择交叉引用3个表
EN

Stack Overflow用户
提问于 2013-04-26 10:18:36
回答 1查看 35关注 0票数 0

数据库如下:

代码语言:javascript
运行
复制
Class_Memberships[id,user_id,class_id]
Class_Challenges[id,challenge_id,class_id]
Challenge_attempts[id,user_id,challenge_id,timestamp,solved]

我需要计算分数,这是用户完成挑战所需的尝试次数。

为了全局实现这一点(不考虑类),我运行以下命令

代码语言:javascript
运行
复制
SELECT user_id, time, count(*) as count, users.username
            FROM challenge_attempts LEFT JOIN users ON
            users.id = user_id WHERE status = 1 

它完成了这项工作并且看起来没有任何bug

我试图限制用户和挑战的结果,这些用户和挑战只属于特定的类。因此,我的查询是这样的

代码语言:javascript
运行
复制
SELECT class_memberships.class_id, user_id, count(*) as count
FROM class_memberships,users,class_challenges
WHERE class_memberships.class_id = 4 AND
      users.id = user_id AND
  user_id IN (
    SELECT user_id
    FROM challenge_attempts LEFT JOIN users ON
    users.id = user_id WHERE status = 1)
  AND class_challenges.challenge_id IN(
        SELECT challenge_id FROM class_challenges
    WHERE class_challenges.class_id = 4
    )

这个

代码语言:javascript
运行
复制
SELECT class_memberships.class_id, user_id, count(*) as count
FROM class_memberships,users,class_challenges
WHERE class_memberships.class_id = 4 AND
      users.id = class_memberships.user_id

part的作用是获取类中的用户

这个

代码语言:javascript
运行
复制
SELECT user_id
    FROM challenge_attempts LEFT JOIN users ON
    users.id = user_id WHERE status = 1

应该得到他们的分数

最后是

代码语言:javascript
运行
复制
SELECT challenge_id FROM class_challenges
    WHERE class_challenges.class_id = 4

应该将分数限制在属于该班级的挑战。但是当我尝试运行它时,字段列表中的sql输出列'class_id‘不明确。

这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2013-04-26 10:53:54

我不太清楚你想要COUNT()做什么,但是如果它不能解决你的问题,请告诉我。

代码语言:javascript
运行
复制
SELECT t1.class_id, t1.user_id, count(t3.id) as count
FROM class_memberships t1
INNER JOIN users t2 ON (t2.id = t1.user_id)
INNER JOIN class_challenges t3 ON (t3.class_id = t1.class_id)
WHERE t1.class_id = 4 
    AND t1.user_id IN (
        SELECT t4.user_id
        FROM challenge_attempts t4
        LEFT JOIN users ON users.id = t4.user_id 
        WHERE status = 1
    )
GROUP BY t1.user_id, t1.class_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16227721

复制
相关文章

相似问题

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