MySQL CASE 表达式是控制流函数的一部分,它使我们能够将if-else 或 if-then-else逻辑写入查询。此表达式可用于任何使用有效程序或查询的地方,例如 SELECT、WHERE、ORDER BY 子句等。
CASE 表达式验证各种条件并在第一个条件为true时返回结果。一旦满足条件,它就会停止遍历并给出输出。如果它找不到任何条件为真,则执行else 块。当没有找到 else 块时,它返回一个NULL值。MySQL CASE 语句的主要目标是处理 SELECT 子句中的多个 IF 语句。
我们可以通过两种方式使用 CASE 语句,具体如下:
第一种方法是取一个值并将其与给定的语句匹配,如下所示。
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result]
END
当第一个compare_value比较为true时,它返回结果。否则,它将返回 else 子句。
# 根据类别id,确定对应的主营类型
select(CASE category_idWHEN 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 ’ 商 品 类 目 ‘
FROMshopxx.xx_platform;
第二种方法是在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,(CASEWHEN productType = 9 OR productType = 11 THEN detail_image #虚拟商品ELSE product_desc # 实物商品END) spu_describe
FROMxx_product
WHEREpfid = 20000AND del_state IS NULL;# 删除状态字段为NULL代表未删除
CASE 表达式根据使用它的上下文返回结果。例如:
CASE语句可以支持以下MySQL版本:
虽然MySQL CASE语法可以帮我们方便的处理一些类似switch...case 这样的逻辑,但是在项目中,对于一些需要经常操作数据库的操作不建议这样做。复杂语法会消耗数据库的性能,C端接口一定要用缓存
最后推荐大家几款优秀的SQL格式化工具:
http://www.toolscat.com/format/sql
http://www.wetools.com/sql-formatter