mysql - 查找学习完全相同课程 SQL 的学生列表
问题描述
我已经看到了很多这样的问题,但是在查看了这里的其他问题后仍然不明白该怎么做。
Select s1.email
From student s, student s1
where s1.sname <> 'Alice'
and not exists (select 1
from enrol e, course c, enrol e1
where s.sname = 'Alice'
and s.sid = e.sid
and s1.sid = e1.sid
and e1.code <> e.code );
请参考:http ://sqlfiddle.com/#!9/aaaf58/5
这是我的示例数据库,添加了一些虚拟值,以便我可以测试这个 SQL 查询。
我要做的是找到与这个名为 alice 的特定学生所学课程完全相同的学生列表。
我见过的许多 SQL 查询都不存在。所以我试图实现它但失败了。我应该得到 b@hotmail 而不是 b@hotmail 和 c@hotmail。(因为只有鲍勃和爱丽丝选择了完全相同的课程)
提前致谢。
解决方案
尝试以下查询
SELECT *
FROM
(
SELECT s.sid,s.email,GROUP_CONCAT(e.code ORDER BY code) course_list
FROM student s
JOIN enrol e ON e.sid=s.sid
WHERE s.sname<>'Alice'
GROUP BY s.sid,s.email
) q
WHERE course_list=(
SELECT GROUP_CONCAT(e.code ORDER BY code) course_list
FROM enrol e
JOIN student s ON e.sid=s.sid
WHERE s.sname='Alice'
)
推荐阅读
- android - “gradle”和“gradle plugin”有什么区别?
- linux - 仅使用 GNU sed 在第一次匹配时插入问题
- android - 设置 config sdk 目标时,RobolectricTestRunner 失败
- rest - 如何过滤不存在属性的 OData 集合?
- python-3.x - Atom 找不到 discord 和 asyncio
- java - 对 Spring Boot 的 Angular HTTP POST 请求导致空值
- javascript - Node.js - 收到 Promise 后渲染
- mysql - 线程未返回所有订阅用户
- javascript - LobiPanel 不会从 localStorage 加载引导面板位置
- google-apps-script - 在 Google Apps 脚本中,有没有办法根据表单数据创建新选项卡,然后将数据从多个工作表复制到新创建的选项卡中?