mysql case...when语句的几个用法

mysql case...when语句的几个用法

一般情况下,case ...when都用在select语句中,不过可以在其他子句中使用

1 在order by子句中进行自定义排序

Sql代码

show create table 20130225t1;

CREATE TABLE `20130225t1` (

`id` tinyint(4) NOT NULL AUTO_INCREMENT,

`b` char(1) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB

select * from  20130225t1;

1 甲

2 丁

3 乙

4 丙

现在想b字段按照甲乙丙丁的顺序排序,直接order by b是不能实现的,正统的做
法可以加一个排序用的字段,按照该字段排序.

不过可以用case when语句实现

Sql代码

select * from  20130225t1

order by case b when '甲' then 1 when '乙' then 2

when '丙' then 3 when '丁' then 4 end

1 甲

3 乙

4 丙

2 丁

还有个手段是find_in_set 函数

Sql代码

select * from  20130225t1

order by FIND_IN_SET(b,'甲,乙,丙,丁')

1 甲

3 乙

4 丙

2 丁

2在where子句中用来进行条件查询

考虑以下两张表

Sql代码

show create table 20130225work

CREATE TABLE `20130225work` (

`id` tinyint(4) NOT NULL AUTO_INCREMENT,

`role_id` tinyint(4) NOT NULL,

`dep_id` tinyint(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB

Sql代码

show create table 20130225role

CREATE TABLE `20130225role` (

`id` tinyint(4) NOT NULL,

`role_name` varchar(5) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB

20130225work是各部门提交上来的申请,role_id是能够看到申请的角色的id,dep_id是提交申请的部门

20130225role是角色.

select * from  20130225role

1 部门经理

2 总经理

select * from  20130225work

1 1 1

2 1 2

3 2 1

4 2 2

现在问题是部门经理角色只能看到自己部门的申请,总经理看到所有部门的申请.

(1)可以在20130225work中加个字段need_check,1表示该申请需要检查部门,0表示不需要

现在要根据role id和dep_id查找该角色对应的申请

Sql代码

set @role_id=1;

set @dept_id=1;

select * from  20130225work

where role_id=@role_id and (case need_check

when 1 then dep_id=@dept_id

else 1=1

end)

1 1 1 1

Sql代码

set @role_id=2;

set @dept_id=1;

select * from  20130225work

where role_id=@role_id and (case need_check

when 1 then dep_id=@dept_id

else 1=1

end)

3 2 1 0

4 2 2 0

(2)或者把need_check加到20130225role中

Sql代码

set @role_id=1;

set @dept_id=2;

select * from  20130225work w,20130225role r

where r.id=@role_id and w.role_id=r.id

and (case need_check

when 1 then dep_id=@dept_id

else 1=1

end)

case when也能在group by语句中出现,只是不知道能有啥作用.

其实我最希望它能出现在from语句中,就能动态指定from的表.

时间: 2024-10-25 20:56:34

mysql case...when语句的几个用法的相关文章

MySQL 的CASE WHEN 语句使用说明_Mysql

mysql数据库中CASE WHEN语句. case when语句,用于计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果. CASE 搜索函数计算一组布尔表达式以确定结果. 两种格式都支持可选的 ELSE 参数. 语法简单 CASE 函数: 复制代码 代码如下: CASE input_expression    WHEN when_expression THEN result_expression      

10个mysql中select语句的简单用法_Mysql

1.select语句可以用回车分隔 $sql="select * from article where id=1" 和 $sql="select * from article where id=1",都可以得到正确的结果,但有时分开写或许能更明了一点,特别是当sql语句比较长时 2.批量查询数据 可以用in来实现 $sql="select * from article where id in(1,3,5)" 3.使用concat连接查询的结果 $

Linux中sh脚本case条件语句用法

case语句适用于需要进行多重分支的应用情况.         case分支语句的格式如下:             case 变量名 in                 模式1)             命令序列1             ;;                 模式2)             命令序列2          ;;                 *)             默认执行的命令序列             esac         case语句结构

详解Mysql case then使用_Mysql

表的创建 CREATE TABLE `lee` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` char(20) DEFAULT NULL, `birthday` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 数据插入: insert into lee(name,birthday) values ('sam','1990-01-01'); i

sql 语句中in的用法总结

问题描述 sql 语句中in的用法总结 sql 语句中 in的用法都有什么?在网上说有两种但是只见有一种用法,另一种用法是什么? 解决方案 sql语句Group By用法一则SQL语句中的NOT IN 的优化sql语句判断 case when用法(二) 解决方案二: http://blog.csdn.net/naruto517308294/article/details/8650507 解决方案三: 就一种吧http://www.w3schools.com/sql/sql_in.asp 解决方案

MySQL中UPDATE语句使用的实例教程_Mysql

一.UPDATE常见用法首先建立测试环境:   DROP TABLE IF EXISTS t_test; CREATE TABLE t_test ( bs bigint(20) NOT NULL auto_increment, username varchar(20) NOT NULL, password varchar(20) default NULL, remark varchar(200) default NULL, PRIMARY KEY (bs) ) ENGINE=InnoDB AUT

mysql中模糊查询的四种用法介绍_Mysql

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有

mysql中replace、regexp正则表达式替换用法

mysql字段值替换具体做法如下:  代码如下 复制代码 update `table_hospital` set service=replace(service,"<a%</font></a>",'') <br type="_moz"> 可以限制ID,范围,具体内容自己发挥想象! mysql数据库中replace.regexp的用法,主要是通过sql语句实现数据的替换. mysql replace用法 1.replace i

正确使用MySQL INSERT INTO语句_Mysql

以下的文章主要介绍的是MySQL INSERT INTO语句的实际用法以及MySQL INSERT INTO语句中的相关语句的介绍,MySQL INSERT INTO语句在实际应用中是经常使用到的语句,所以对其相关的内容还是多多掌握为好. INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... MySQLINSERT INTO SELEC