作为一个初阶的SQL boy,我在联系SQL的时候遇到了一个in使用的问题,请各位大佬不吝赐教。
-
问题描述:
对同一个问题写了三个SQL语句,三个语句的区别都在HAVING COUNT(DISTINCT
score
.c_id
) 的后面
语句一:执行查询后有正确结果
语句二:执行查询后无结果
语句三:执行查询后有正确结果 -
思考:
从数学上讲,语句一和语句二都应该有正确的结果,单个数值也是一个集合。
如果是因为单个数值不能在in后面,但是语句三却有正确结果,跟语句二的结果不同。
我怀疑是SQLyog对于in语句有规则限制,导致了这种差异请各位指点迷津!
SQL语句:
#45、 查询选修了全部课程的学生信息
#SELECT COUNT(DISTINCT `c_id`) FROM `course`=3
#语句一:
SELECT `score`.`s_id`,`s_name`,`s_birth`,`s_sex`FROM
`student`LEFT OUTER JOIN `score` ON`student`.`s_id`=`score`.`s_id`
GROUP BY `score`.`s_id`,`s_name`,`s_birth`,`s_sex`
HAVING COUNT(DISTINCT `score`.`c_id`) =(SELECT COUNT(DISTINCT `c_id`) FROM `course`)
#语句二:
SELECT `score`.`s_id`,`s_name`,`s_birth`,`s_sex`FROM
`student`LEFT OUTER JOIN `score` ON`student`.`s_id`=`score`.`s_id`
GROUP BY `score`.`s_id`,`s_name`,`s_birth`,`s_sex`
HAVING COUNT(DISTINCT `score`.`c_id`) IN (SELECT COUNT(DISTINCT `c_id`) FROM `course`)
#语句三:
SELECT `score`.`s_id`,`s_name`,`s_birth`,`s_sex`FROM
`student`LEFT OUTER JOIN `score` ON`student`.`s_id`=`score`.`s_id`
GROUP BY `score`.`s_id`,`s_name`,`s_birth`,`s_sex`
HAVING COUNT(DISTINCT `score`.`c_id`) IN (3)
查询结果:
语句一和语句三:
语句二: