首页 > 数据库 >mysql select @params:= 的问题

mysql select @params:= 的问题

时间:2023-03-17 12:33:07浏览次数:42  
标签:std name title params mysql class select cls

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

相关文章

  • MySQL错误:Access denied for user 'root'@'%' to database 'xxx'
    本篇记录了我在遇到该问题,解决该问题的全部过程,相信自己,还是很强大的,希望对遇到相似问题的网友有所帮助~本人Linux服务器,Centos7版本,Mysql5.7.14。。。最初问题:使用N......
  • mysql不同版本的功能差异
    概述mysql不同版本的功能差异介绍mysql的官网下载地址http://dev.mysql.com/downloads/MySQLCommunityServer(社区版)社区版本,免费,但是Mysql不提供官方技术支持......
  • 力扣196(MySQL)-删除重复的电子邮箱(简单)
    题目:表: Person编写一个SQL删除语句来删除所有重复的电子邮件,只保留一个id最小的唯一电子邮件。以任意顺序返回结果表。(注意:仅需要写删除语句,将自动对剩余结......
  • 技术分享 | 为什么 SELECT 查询选择全表扫描,而不走索引?
    也是很巧合,之前遇到过一次情况,一条SQL,根据时间范围查数据,但有时候速度很快,有时候速度就慢。第一反应是没有设置索引,但开发人员告诉我已经设置了二级索引,查询的速度依然有......
  • MySql生成ER【StarUML】文件
    1.背景要画ER图,一个个打费时费力,StarUML文件打开是json。那么就有可能自动生成。2.效果把表结构生成好,自己只要维护关系即可。3.代码importlombok.Data;import......
  • 【项目实战】基于Python+Django+MySQL的自行车租赁系统(附完整源码)
    1、项目说明基于python+Django+Mysql的自行车租赁系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据......
  • 【项目实战】基于Python+Django+MySQL的在线投票系统(附完整源码)
    1、项目说明基于Python+Django+Mysql在线投票系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据库数......
  • 【项目实战】基于Python+Django+MySQL的个人博客系统(附完整源码)
    1、项目说明基于python+Django+Mysql的个人博客系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据库......
  • Mysql
    1.为什么要使用数据库持久化:把数据保存到可掉电式存储设备中已供之后使用,数据持久化意味着将内存中的数据保存到硬盘上加以固化。持久化的作用:将内存中的数据存储在关系......
  • Mysql--JOIN连表查询
    一、Join查询原理MySQL内部采用了一种叫做nestedloopjoin(嵌套循环连接)的算法:通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下......