mysql一对多查询问题

数据库mysql

A表是学生表(数据量 20万)
stu_id name

B表是学生兴趣表 (数据量 80万)
stu_id its_id

C表是学生特长表 (数据量 170万)
stu_id gda_id

需求是这样的

现在需要查出既填写了兴趣,又填写了特长的学生,且结果中学生名字不重复。求一条高性能的sql!

阅读 3k
3 个回答

join+group by即可,兴趣表和特长表加上stu_id的索引.

from t_student s 
join t_its i on i.stu_id=s.stu_id 
join t_gda g on g.stu_id=s.stu_id
group by s.stu_id
SELECT stu_id, name FROM A WHERE stu_id in 
(
    SELECT stu_id FROM B
) AND stu_id in
(
    SELECT stu_id FROM C
)
GROUP BY name

A表stu_id 应该为唯一索引或主键,结果不存在重复的情况。即使学生名字重复也应该显示。

SELECT A.stu_id,A.name FROM A JOIN B ON A.stu_id = B.stu_id JOIN C ON C.stu_id = A.stu_id

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏