MySQL中union和order by一起使用的不排序问题
2020-07-14 06:23
239 查看
MySQL中union和order by一起使用的不排序问题
背景描述:
这里有一张sc的表,有三个字段,s(学号),c(课程号),score(课程成绩),数据结构如下:
创建表的sql语句如下: create table sc1( s varchar(10), c varchar(10), score decimal(18,1)) ENGINE=INNODB CHARSET=utf8;
现在在表中插入数据:
插入数据的sql语句如下: insert into sc values ('01','01','80'), ('01','02','90'), ('01','03','99'), ('02','01','70'), ('02','02','60'), ('02','03','80'), ('03','01','80'), ('03','02','80'), ('03','03','80'), ('04','01','50'), ('04','02','30'), ('04','03','20'), ('05','01','76'), ('05','02','87'), ('06','01','31'), ('06','03','34'), ('07','02','89'), ('07','03','98')
题目描述
我们将sc表中的数据,按照不同的课程(c)分开排列,并且按照成绩排序生成序号。
思路分析:因为这里要按照不同的课程编号进行排列,我们可以使用where条件先将不同课程中数据筛选出来成一张表,然后在这张表中使用order排序,并且添加伪列生成序号,最后将三种表联合。
方法1:
(SELECT (@rowNO1 := @rowNo1 + 1 ) AS rowno1,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO1 := 0) b where a.c=01 ORDER BY a.score desc limit 10000 ) UNION (SELECT (@rowNO2 := @rowNo2 + 1 ) AS rowno2,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO2 := 0) b where a.c=02 ORDER BY a.score desc limit 10000 ) UNION (SELECT(@rowNO3 := @rowNo3 + 1 ) AS rowno3,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO3 := 0) b where a.c=03 ORDER BY a.score desc limit 10000);
方法二:
SELECT * from (SELECT (@rowNO1 := @rowNo1 + 1 ) AS rowno1,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO1 := 0) b where a.c=01 ORDER BY a.score desc) t1 UNION SELECT * from (SELECT (@rowNO2 := @rowNo2 + 1 ) AS rowno2,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO2 := 0) b where a.c=02 ORDER BY a.score desc) t2 UNION SELECT * from (SELECT(@rowNO3 := @rowNo3 + 1 ) AS rowno3,a.* FROM(SELECT * FROM sc) a,(SELECT @rowNO3 := 0) b where a.c=03 ORDER BY a.score desc) t3;
遇见问题描述
我在做这个题目的时候发现,针对方法一,如果不加limit这里的order by是没有生效的,所以在使用union进行多表联合查询的时候,需要按结果对某一个字段进行分页的时候,需要添加limit(分页)每个字句的order by才会生效;
针对方法二,这里主要是针对union里面的每一个子查询的结果集,要把这个结果集当成一张独立的表(在外部再使用select*from),再使用union。
知识补充:
union与union all:
1、union和union all的区别,union会去掉相同的记录,但是union all是简单的将两张表合并在一起;
2、union、union all都必须要保证联合的两个字段数一样,字段可以不同。
相关文章推荐
- MySQL的union和order by一起使用的问题
- MySQL中group by 与 order by 一起使用排序问题
- mysql :group by 与order by 共同使用时排序问题,小心utf8的排序
- mysql数据去重并排序使用distinct 和 order by 的问题
- MySQL中union和order by一起使用的方法
- Mysql联合查询UNION和Order by同时使用报错问题的解决办法
- union all和order by一起使用出问题
- Mysql联合查询UNION和Order by同时使用报错问题的解决办法
- MySQL中union和order by一起使用
- union 和order by 连接使用报错的问题
- mysql中UNION使用的问题 --乐杨俊
- mysql union order by 分别排序问题
- MySQL中ORDER BY与LIMIT一起使用(有坑)
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- MySQL使用 IN 查询取出数据排序问题(与in排序相同、不排序)
- mysql的order by排序不正确的问题
- MySQL Union语句排序问题
- Mysql8.0使用窗口函数解决排序问题
- jstree详解(解决jstree树的sort和move_node和drop drag一起使用时不能排序的问题)(附源码)
- mysql5.6中 order by 多个字段排序问题