MySQL CASE表达式简单使用

MySQL CASE 表达式是控制流函数的一部分,它使我们能够将if-else 或 if-then-else逻辑写入查询。此表达式可用于任何使用有效程序或查询的地方,例如 SELECT、WHERE、ORDER BY 子句等。

CASE 表达式验证各种条件并在第一个条件为true时返回结果。一旦满足条件,它就会停止遍历并给出输出。如果它找不到任何条件为真,则执行else 块。当没有找到 else 块时,它返回一个NULL值。MySQL CASE 语句的主要目标是处理 SELECT 子句中的多个 IF 语句。

我们可以通过两种方式使用 CASE 语句,具体如下:

一、简单的CASE语句

第一种方法是取一个值并将其与给定的语句匹配,如下所示。

CASE value   
    WHEN [compare_value] THEN result   
    [WHEN [compare_value] THEN result ...]   
    [ELSE result]   
END  

当第一个compare_value比较为true时,它返回结果。否则,它将返回 else 子句。

示例
# 根据类别id,确定对应的主营类型
select
  (
    CASE category_id
      WHEN 35 THEN '生鲜果蔬'
      WHEN 36 THEN '休闲零食'
      WHEN 37 THEN '蛋糕烘焙'
      WHEN 38 THEN '茶饮酒水'
      WHEN 39 THEN '滋补保健'
      WHEN 40 THEN '粮油米面'
      WHEN 41 THEN '综合食品'
      WHEN 26 THEN '汽车养护'
      WHEN 31 THEN '充值缴费'
      ELSE ' '
    END
  ) as ’ 商 品 类 目 ‘
FROM
  shopxx.xx_platform;

二、检索CASE语句

第二种方法是在WHEN子句中考虑一个search_condition,如果找到,则在相应的 THEN 子句中返回结果。否则,它将返回 else 子句。如果没有指定 else 子句,它将返回一个 NULL 值。

CASE   
    WHEN [condition] THEN result   
    [WHEN [condition] THEN result ...]   
    [ELSE result]   
END  
示例
# 根据商品类型不同,描述信息存放的字段也不一样
SELECT id,id,goods,organize supplier_id,productType,is_list,is_marketable,
  (
    CASE
      WHEN productType = 9 OR productType = 11 THEN detail_image #虚拟商品
      ELSE product_desc # 实物商品
    END
  ) spu_describe
FROM
  xx_product
WHERE
  pfid = 20000
  AND del_state IS NULL;# 删除状态字段为NULL代表未删除

三、MySQL CASE表达式的返回类型

CASE 表达式根据使用它的上下文返回结果。例如:

  • 如果在字符串上下文中使用,则返回字符串结果。
  • 如果在数字上下文中使用,则返回整数、浮点数、十进制值。

四、 MySQL CASE表达式 版本支持

CASE语句可以支持以下MySQL版本

  • MySQL 8.0
  • MySQL 5.7
  • MySQL 5.6
  • MySQL 5.5
  • MySQL 5.1
  • MySQL 5.0
  • MySQL 4.1
  • MySQL 4.0
  • MySQL 3.23.3

最后

虽然MySQL CASE语法可以帮我们方便的处理一些类似switch...case 这样的逻辑,但是在项目中,对于一些需要经常操作数据库的操作不建议这样做。复杂语法会消耗数据库的性能,C端接口一定要用缓存

最后推荐大家几款优秀的SQL格式化工具:

http://www.toolscat.com/format/sql

http://www.wetools.com/sql-formatter

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的大李子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值