in 和子查询同时使用查不出来数据

old城 2022-10-07 09:47:13

一个很蛋疼的问题,如下,最后的结果查询不来,非常让人疑惑。

使用过程随机生成数据,我怀疑时类型问题,但是在创建中使用了cast和concat都没用,直接用in (98,91)之类的可以,但是用上子查询就查不出来 了

 create table query_test(
  stu_id varchar(20) primary key comment "学号",
  stu_name varchar(20) comment "姓名",
  stu_grade int comment "成绩"
 )
 ​
 delimiter $$
 create procedure auto_insert1()
 begin
    declare i int default 1;
    while (i<1000) do 
       insert into worker.query_test values (i,substr(md5(rand()*100),1,3),rand()*100);
       set i=i+1;
    end while;
 end $$
 delimiter ;
 ​
 call  auto_insert1();
 ​
 select * from query_test where stu_id in 
 (select group_concat(stu_id) from query_test group by stu_grade having stu_grade =100)  

 

 

...全文
30 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

子查询语句本身有问题,里面的group by 用得不对,查询结果里用到了stu_id,这不在group by 分组字段里

old城 10-13
  • 举报
回复
@我想rua熊猫 group_concat 是将同一个分组里的数据连接起来,stu_id不该在group_by里,我这里没错,子查询是可以查到结果的
  • 举报
回复 1
@old城 涨知识了,我试了一下,group_concat是将结果连接起来,作为一个字符串输出,而in()里面需要的是一个list类型,是有本质上区别的,不能像你这样想当然的拼接一个语句。 假设,select group_concat(stu_id) from query_test group by stu_grade having stu_grade =100 的结果为98,91: stu_id为int类型时,stu_id in ("98,91"),数据库将字符串转成int类型时,取到第一个非数字时,即stu_id in (98)
old城 10-25
  • 举报
回复
@我想rua熊猫 其实我只是想查对应分数下的学生,确实不该用group_concat ,可以用这样的方式,select * from query_test where stu_id in (select stu_id from query_test group by stu_grade,stu_id having stu_grade =100)
相关推荐
发帖
MySQL

5.6w+

社区成员

MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
帖子事件
创建了帖子
2022-10-07 09:47
社区公告
暂无公告