`
kabike
  • 浏览: 609916 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

阅读更多
一般情况下,case ...when都用在select语句中,不过可以在其他子句中使用
1 在order by子句中进行自定义排序
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语句实现
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 函数
select * from  20130225t1 
order by FIND_IN_SET(b,'甲,乙,丙,丁')

1 甲
3 乙
4 丙
2 丁

2在where子句中用来进行条件查询
考虑以下两张表
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


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查找该角色对应的申请
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

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中

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的表.
分享到:
评论

相关推荐

    MySQL数据库:流程控制语句case.pptx

    2)掌握 —— CASE语句的使用方法; case语句 CASE语句语法格式为: 第一种: CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE ...

    详细解析 mysql 中的 case when 语句的使用

    ### MySQL中的Case When语句详解 #### 一、引言 在MySQL中,`CASE WHEN`语句是一种非常有用的控制流程语句,它允许开发者根据不同的条件返回不同的结果。这在处理复杂的数据筛选和聚合任务时特别有用。本文将详细...

    mysql存储过程之case语句用法实例详解

    MySQL中的CASE语句是SQL语言中的一个重要组成部分,它在存储过程和复杂查询中扮演着条件判断的角色,使得代码更加简洁易读。CASE语句提供了两种形式:简单CASE和可搜索CASE。 1. 简单CASE语句: 简单CASE语句主要...

    case when和sum case when 写法及拼接字段

    这个查询通过 `SUM` 函数与 `CASE WHEN` 的组合使用,可以轻松地统计出每种订单状态的数量。 ### 拼接字段 在 SQL 中,经常需要将多个字段或值合并成一个字符串。这可以通过使用字符串连接操作符(如 `+` 或 `||`...

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

    浅析SQL语句行列转换的两种方法 case…when与pivot函数的应用

    在SQL中,对数据进行行列转换是数据分析过程中常见的需求,特别是在报表展示或数据...在某些数据库系统中,如MySQL,不支持内置的 `PIVOT` 函数,此时可以使用 `CASE...WHEN` 或者自定义的子查询和联接来实现类似功能。

    MySQL的CASE WHEN语句的几个使用实例

    在这个实例中,我们将深入理解如何使用CASE WHEN,并通过几个具体的例子来演示其用法。 首先,我们来看一个简单的使用CASE WHEN进行字符串替换的例子。在这个示例中,我们有一个名为sales的表,其中包含了category...

    MySQL中使用case when 语句实现多条件查询的方法

    在MySQL中,我们可以使用`CASE WHEN`结合子查询来达到这个目的。但是,需要注意的是,这里的子查询会为每个条件执行一次,这可能导致性能问题,尤其是在大数据量时。下面的SQL代码展示了如何实现这一查询: ```sql ...

    MySQL性能优化的最佳21条经验

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能优化对于任何依赖于它的应用程序来说都是至关重要的。以下是从"MySQL性能优化的最佳21条经验"中提取的一些关键知识点: 1. **索引优化**:索引是提升查询...

    MySQL 的CASE WHEN 语句使用说明

    MySQL中的CASE WHEN语句是一种非常强大的条件控制工具,它允许你在SQL查询中根据不同的条件返回不同的结果。CASE语句在数据库处理中起到了类似编程语言中条件判断的作用,使得你可以更灵活地处理数据。 简单CASE...

    MySQL 中CASE-WHEN 的应用.pdf

    本文将深入探讨CASE-WHEN的用法,并结合一个问卷调查系统的实例来展示其在MySQL中的实际应用。 1. 业务需求分析 在开发问卷调查系统时,我们需要记录和统计参与者的回答,以生成分析报告。这涉及到一个问题表...

    mysql case when group by 实例详解

    MySQL中的`CASE WHEN`语句是一种条件判断表达式,它在SQL查询中起到了类似编程语言中`switch-case`或`if-else`的作用。这个功能强大的工具允许你在单个查询中根据不同的条件返回不同的结果值,非常适合数据分析和...

    MySQL排序中使用CASE WHEN的方法示例

    以下是一个关于如何在MySQL排序中使用`CASE WHEN`方法的详细说明。 ### 1. `CASE WHEN` 基本语法 `CASE WHEN` 的基本语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ...

    mysql sql.doc

    - **查询重构**:复杂的`CASE`语句可能导致性能下降,可能需要寻找更简单的逻辑或使用其他SQL构造来替代。 - **数据类型优化**:确保字段的数据类型是最适合的,比如日期和时间字段应使用日期和时间类型而非字符串...

    MySQL初级考试试题及答案.docx

    本资源摘要信息中涵盖了 MySQL 初级考试的试题及答案,涵盖了 MySQL 的基础知识点,包括聚合函数、SQL 语句、视图、游标、索引、事务处理、数据操纵语句等。 1. 聚合函数:MAX 函数用于求最大值,IF 函数用于条件...

Global site tag (gtag.js) - Google Analytics