mysql通过判断语句给临时字段赋值的几种方法

1.case函数

语法:

CASE 
WHEN 判断条件 THENWHEN 判断条件 THENWHEN 判断条件THENELSEEND AS 临时字段名称

样例:

select
username,
sexid,
CASE 
WHEN user.sexid=1 THEN '男'
WHEN user.sexid=0 THEN '女'
ELSE '未知'
END AS sexname
from user

解释:查询user表中的username和sexid字段,并创建一个临时字段sexname。判断sexid的值,当sexid等于1的时候,sexname的值就为“男”,等于0的时候,sexname的值为“女”,其他情况则为未知。

2.IF()函数

语法:

IF(判断条件,value1,value2) AS 临时字段名

用法:

select
username,
sexid,
IF(user.sexid=1,'男','女') AS sexname
from user

解释:单if判断只会有两种情况,sexid=1为真,sexname的值就时男,否则就是女

IF()函数嵌套使用

IF(判断条件,,
	IF(判断条件,,)
) AS 临时字段名称

用法:

select
username,
sexid,
IF(user.sexid=1,'男',
	IF(user.sexid=0,'女','未知'
	)
) AS sexname
from user

解释:当sexid等于1的时候,sexname的值就为“男”,等于0的时候,sexname的值为“女”,其他情况则为未知。会比单if多一次判断

但是,这几种方法都类似于java中的if,else-if,只会用一个值,只要其中一个为真,剩下的就不判断了。如果不管是否为真,每个条件都判断,且这几次的判断结果都放在同一个临时字段怎么办?

需求:

有检定证书是否提交,原始记录是否提交,考试试卷是否提交这三个字段,现在需要判断这三个字段的值,如果哪个提交了就放在临时字段里面,用逗号拼接。

SELECT

CONCAT_WS(',',

CASE
		WHEN ba.is_transfer_certificate='1' THEN '检定证书' 
END,
CASE
		WHEN ba.is_transfer_original='1' THEN '原始记录'
END,
CASE
		WHEN ba.is_transter_scores='1' THEN '理论考试试卷'
END ) AS a,
bte.apply_code
FROM bas_test_scores bts
LEFT JOIN bas_archiv ba ON ba.test_scores_id=bts.id
LEFT JOIN bas_train_staff_lesson btsl ON btsl.id=bts.train_staff_lesson_id
LEFT JOIN bas_train_leason btl ON btsl.lesson_id=btl.id
LEFT JOIN bas_enroll_staff bes ON btsl.staff_id=bes.id
LEFT JOIN bas_train_enroll bte ON bes.enroll_id=bte.id

效果:
在这里插入图片描述
解释:
每一次判断都重新写一个case when,这样就能实现三个判断都会执行到,每个判断条件都会有对应的值,如果三个判断条件都为真,那么三个值都会通过最外层CONCAT_WS()函数存放在临时字段a里面,并且以指定的分隔符(这里用的逗号)隔开。

concat_ws()函数

功能:一次性指定分隔符
语法:

concat_ws(separator,str1,str2,...)

说明:第一个参数指定分隔符 分隔符不能为空 如果为NULL 则返回值NULL

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值