gpt4 book ai didi

mysql - 连接两个表时在mysql中查找重复值

转载 作者:行者123 更新时间:2023-11-29 16:42:54 25 4
gpt4 key购买 nike

我有以下 3 个学生表,我需要查找当前就读于同时开课的类(class)的学生姓名

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 和姓名,因为两个学生可能具有相同的姓名。

最后,一个学生可能有多个相互冲突的类(class),但您只想看到该学生一次。尽管上述内容可能足以满足您的目的,但针对所述问题的更准确的解决方案是:

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;

关于mysql - 连接两个表时在mysql中查找重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53255153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com