1、创建班级表
create table class ( id int primary key auto_increment, title varchar(50) )
2、添加测试数据
insert into class values(null,'小班'),(null,'中班'),(null,'大班')
3、按默认排序查看结果
select * from class
4、通过 select @params:= 取一条记录
select @title:=title from class limit 1; select @title;
=> 结果符合预期
5、改变默认排序重新查看结果
select * from class order by convert(title using gbk)
6、通过 select @params:= 结合自定义排序取一条记录
select @title:=title from class order by convert(title using gbk) limit 1; select @title;
=> 结果符合预期
7、再添加一张学生表
create table student ( id int primary key auto_increment, cid int, name nvarchar(50) )
8、添加测试数据
insert into student values(null,1,'刘备'),(null,2,'关羽'),(null,3,'张飞')
9、按默认排序查看关联表结果
select std.*,cls.title from student std left join class cls on std.cid=cls.id
10、通过 select @params:= 取一条记录
select @name:=name from student std left join class cls on std.cid=cls.id limit 1; select @name;
=> 结果符合预期
11、改变默认排序重新查看关联表结果
select std.*,cls.title from student std left join class cls on std.cid=cls.id order by convert(title using gbk) desc
12、通过 select @params:= 结合自定义排序获取关联表的一条记录
select @name:=name from student std left join class cls on std.cid=cls.id order by convert(title using gbk) desc limit 1; select @name;
问题出来了!!!
如果换其他排序方式,如:
order by cid order by cid desc order by convert(name using gbk) order by convert(name using gbk) desc order by convert(title using gbk)
这些都没问题。
为什么会出现这个情况呢?我也不知道,暂时还找不到答案,先记录下吧。
不过倒是有替代方案:
select name from student std left join class cls on std.cid=cls.id order by convert(title using gbk) desc limit 1 into @name; select @name;
替代方案只会出现一个查询结果集,总不会导致上面方案的两个结果集不一致的情况。
标签:std,name,title,params,mysql,class,select,cls From: https://www.cnblogs.com/laoq112/p/17226230.html