程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql case...when語句的幾個用法

mysql case...when語句的幾個用法

編輯:MySQL綜合教程


mysql case...when語句的幾個用法   一般情況下,case ...when都用在select語句中,不過可以在其他子句中使用  1 在order by子句中進行自定義排序    www.2cto.com   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 丙    www.2cto.com   現在想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中    www.2cto.com   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的表.  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved