如何计算MySQL的结果在一个有很多通过关系
有一篇很好的文章介绍了如何在一个数据库中过滤结果,它有很多关系: 我只是在寻找计数结果的解决方案,而不是全部显示如何计算MySQL的结果在一个有很多通过关系,mysql,sql,count,has-many,relational-division,Mysql,Sql,Count,Has Many,Relational Division,有一篇很好的文章介绍了如何在一个数据库中过滤结果,它有很多关系: 我只是在寻找计数结果的解决方案,而不是全部显示 student { id name } club { id name } student_club { student_id club_id } 两个俱乐部1和俱乐部2都有多少学生? 编辑: 使用下面链接中的“Martin 2”方法将非常好: SELECT s.stud_id, s.name FROM student s JOI
student {
id
name
}
club {
id
name
}
student_club {
student_id
club_id
}
两个俱乐部1和俱乐部2都有多少学生?
编辑:
使用下面链接中的“Martin 2”方法将非常好:
SELECT s.stud_id, s.name
FROM student s
JOIN student_club sc USING (stud_id)
WHERE sc.club_id IN (30, 50)
GROUP BY 1,2
HAVING COUNT(*) > 1;
只是添加一些东西来计算结果 查询为表
学生俱乐部
和俱乐部
使用表别名。这允许仅为两个俱乐部的学生返回行。然后,使用COUNT
可以返回学生人数:
SELECT COUNT(*) AS nb
FROM student s, student_club sc1, club c1, student_club sc2, club c2
WHERE s.id=sc1.student_id AND sc1.club_id=c1.id AND c1.name="CLUB1"
AND s.id=sc2.student_id AND sc2.club_id=c2.id AND c2.name="CLUB2"
如果确实要使用“Martin 2”查询,可以通过以下方式计算记录数:
SELECT COUNT(*) AS nb
FROM (
SELECT s.stud_id, s.name
FROM student s
JOIN student_club sc USING (stud_id)
WHERE sc.club_id IN (30, 50)
GROUP BY 1,2
HAVING COUNT(*) > 1
) tmp;
对于两名学生来说,可能是最简单、最干净、最快的:
SELECT COUNT(*) AS nb
FROM student s, student_club sc1, club c1, student_club sc2, club c2
WHERE s.id=sc1.student_id AND sc1.club_id=c1.id AND c1.name="CLUB1"
AND s.id=sc2.student_id AND sc2.club_id=c2.id AND c2.name="CLUB2"
你根本不需要加入student
表,只要你知道你感兴趣的stud\u id
列表
对于任何数量的学生来说,马丁的查询都更方便。您可以以类似的方式进行简化:
SELECT count(*) AS ct
FROM (
SELECT stud_id
FROM student_club
WHERE club_id IN (30, 50)
GROUP BY 1
HAVING count(*) = 2 -- adapt to number of items in list
) x;
当然,要求
(stud\u id,club\u id)
是唯一的,并且列表项也是唯一的。CLUB1和CLUB2只是示例。它可以是3个或更多。这将是伟大的使用“马丁2”的方法和计数结果。请不要改变您的问题,一旦它被回答了!您当前的问题是“俱乐部1和俱乐部2共有多少名学生?”,我的回答解决了这个问题。对不起,如果我没有正确解释,但对我来说这不是一个解决方案。非常感谢。它真的简化了。你能解释一下查询最后的“x”是什么意思吗?@IkaPkhakadze:That是AS x的缩写,是子查询的别名。“发件人”列表中的每个子查询都需要SQL中的名称。