Fork me on GitHub

1235MySQL错误

1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

1235

今天正在些SQL语句,发现一个从未出现过的问题,在此记录下。
查询学生信息表中2班及2班之后的所有的学生的信息

原本以为很简单,要查询的班级不在一班就可以,但是使用子查询的时候出了问题。

1
select * from student where class_id not in(select class_id from student order by class_id asc limit 1);

1

一开始以为是括号里的selectt写错,但是单独拿出来发现并没有错。
2
随后拜访了度娘,说是MySQL子查询不支持limit
随后改了一下。

1
select * from student where class_id not in(select t.class_id from (select * from student order by class_id asc limit 1) as t);

3
如此可以绕开limit子查询问题。

后来又想有没有一种写法,用来代替limit的第二个参数,让它表示最大值。
在低版本中,确实是有的。
-1表示最大值,用的方法也是如此limit 1, -1
但是,这样的写法被官方认定是不合理的,在新的版本中被禁用了。
详情可以参考官方报告

查询姓李的信息

两种写法,记录下。

1
select * from student where name like '李%';

1
select * from student where left(name, 1)= '李';

left(name, 1)即取列字符的第一个字。

查询名称为两个字的

1
select * from student where name like '李_';

查询每个班级总人数

1
select st.class_id as "班级", count(st.id) as "总人数" from student as st group by st.class_id;

查询每个班有多少人以及男女各多少人

1
2
3
4
5
select sc.class_id as '班级名称',
count(sc.id) as '总人数' ,
sum(case when sc.sex='男' then 1 else 0 end) as '男',
sum(case when sc.Sex='女' then 1 else 0 end) as '女'
from student as sc group by sc.class_id

查询人数少于2的班级(包括2)

1
select sc.class_id from student as sc group by sc.class_id having(count(class_id))<= 2;
Your support will encourage me to continue to create!