mysql - 连接两个表时在mysql中查找重复值
问题描述
我有以下 3 个学生表,我需要找到当前就读于同时开会的班级的学生的姓名
student(**snum**, sname, major, level, age)
class(**cname**, meets_at, room)
enroll(**snum**, **cname**)
每个表的键以粗体显示。
我已经尝试了以下代码,但我不确定我是否接近正确的答案。
select s.sname
from student s
join
( select c.cname
, c.meets_at
, (count(*)
from class c
having count( * ) > 1
) e
on c.cname = e.cname
and s.snum = e.snum;
解决方案
我会认为这是与学生一起加入meetsat
。所以,这让学生知道他们的上课时间:
select s.sname, c.meets_at
from students s join
enrolls e
on s.snum = e.snum join
classes c
on c.cname = e.cname;
然后,要获取重复项,请使用聚合和过滤器having
:
select s.snum, s.sname, c.meets_at, count(*) as cnt
from students s join
enrolls e
on s.snum = e.snum join
classes c
on c.cname = e.cname
group by s.snum, sname, c.meets_at
having count(*) >= 2;
请注意,这包括 ID 和姓名,因为两个学生可能有相同的姓名。
最后,一个学生可能有多对冲突的班级,但您只想看到该学生一次。尽管上述内容可能足以满足您的目的,但针对所述问题的更准确的解决方案是:
select distinct s.sname
from students s join
enrolls e
on s.snum = e.snum join
classes c
on c.cname = e.cname
group by s.snum, sname, c.meets_at
having count(*) >= 2;
推荐阅读
- python - 带有嵌套字段过滤器的 Django 模型实例
- properties - 如何使 edit_traits() GUI 项目响应其依赖项的变化?
- ruby-on-rails - 我正在使用 AJAX 对评论进行分页,但它正在加载重复项,而不是新页面
- python - 异常是标量类型 Float 的预期对象,但参数 #2 'other' 得到标量类型 Long
- javascript - Electron 忽略 @css prefers-color-scheme
- javascript - 如何使用 firebase 增量功能?
- javascript - 发送多个附件时,Nodemailer 崩溃
- python - 反转字典并将其原始键作为列表中的值
- python - Python 可以通过 ctypes 并行调用 C 函数以提高速度吗?
- php - 如何使用 PHP 正确管理出价系统?