MySQL查询所有学校的学生

MySQL查询所有学校的学生,mysql,Mysql,表由学校id和学生姓名组成 School_id Student_Name 1 Raj 1 Tan 1 Brian 2 Raj 2 Brian 3 Raj 3 Tan 因此输出应该是Raj,因为Raj在所有学校(1,2,3)学习过。如果已知不同学校的总数,则可以使用以下查询: SELECT Student_Name FROM mytable GROUP

表由学校id和学生姓名组成

School_id   Student_Name
1           Raj
1           Tan
1           Brian
2           Raj
2           Brian
3           Raj
3           Tan

因此输出应该是Raj,因为Raj在所有学校(1,2,3)学习过。

如果已知不同学校的总数,则可以使用以下查询:

SELECT Student_Name
FROM mytable
GROUP BY Student_Name
HAVING COUNT(DISTINCT School_id) = 3
否则,您可以使用子查询代替
3
,如下所示:

SELECT COUNT(DISTINCT School_id)
FROM mytable

使用count(distinct…)获取子查询中的学校数,将此数字连接到外部查询,在外部查询中计算学生关联的学校数,并在having子句中进行筛选

SELECT Student_Name, COUNT(DISTINCT School_id), t1.school_count
FROM yourtable
INNER JOIN (SELECT COUNT(DISTINCT School_id) as school_count FROM yourtable) t1
GROUP BY Student_Name
HAVING COUNT(DISTINCT School_id) = t1.school_count
编辑:添加描述

简单解决您的确切要求

通过检查已就读所有学校的所有学生,仅检索学生姓名(列表中不同学校的数量必须等于学生就读的不同学校的数量)


您不能在where子句中使用group by函数,因为其结果尚不可用。虽然此答案可能是正确且有用的,但最好解释它如何帮助解决问题。如果有一个变化(可能是无关的)导致它停止工作,并且用户需要了解它曾经是如何工作的,那么这在将来变得特别有用。谢谢我认为这是错误的语法
HAVING COUNT(DISTINCT School\u id)
@dbmitch:no,这是正确的语法,请参阅有关COUNT(DISTINCT…)的MySQL文档:如果这是投票失败的原因,然后请收回它。Will do-在Fiddle上测试,它不喜欢它-一定是网站的问题?不可能告诉你是什么导致了未知sql语句中的未知错误。这是你的sql-错误是“having子句”中的未知列“t1.school\u count”测试显示你已经尝试了什么以及哪里出错了。否决的原因?“答案没用”应该是原因。如果它按照用户的要求工作,则非常有用。如果你认为这不是一个理想的解决方案,那么发表评论就更合适了。在这两种情况下,评论不是我更合适,但他们可能会否决它,因为它没有用处。你所做的只是发布一段代码,完全没有任何解释。发布答案的目的是为了实际回答问题,而不仅仅是提供一些代码,这些代码可能在所有可能的情况下都能工作,也可能在所有可能的情况下都不能工作。否决无用的答案。不要挂旗子
SELECT Student_Name, COUNT(DISTINCT School_id), t1.school_count
FROM yourtable
INNER JOIN (SELECT COUNT(DISTINCT School_id) as school_count FROM yourtable) t1
GROUP BY Student_Name
HAVING COUNT(DISTINCT School_id) = t1.school_count
SELECT Student_Name
FROM Table1
GROUP BY Student_Name
HAVING Count(School_ID) =
  (SELECT Count(School_ID) 
   FROM (SELECT DISTINCT School_ID FROM Table1) t1
  )