mysql中自连接查询与case-when-then用法

在项目中用到了,以前没用过,记录一下日常。

先看一下数据表结构:


其中parent_id字段与id字段对应,代表父类归属。

需求1:查询出表中name字段对应的父类归属

我们可以用别名parent_name字段来接收

sql如下:

SELECT
	i.id,
	i.name,
	i.parent_id,
	f.name as parent_name
FROM
	info i
left join 
	info f 
ON 
	i.parent_id = f.id
WHERE
1=1

分析一下上述sql,用到了自连接查询,就是自己与自己连接查询。

查询的f.name取了parent_name别名,info i与info j 代表着两个表连接,可看做子表与父表的连接查询

条件是 i.parent_id = f.id

查询结果如下:


这样展示的数据很清晰的可以看出其父类归属;

但是我们看到了,“课程”、“电子设备”没有父类归属,字段值当然就显示为Null了,但是这样太丑了,而且实际运用时前台展示效果不好,所以可以优化一下sql。

需求2:父类归属显示为Null的,要求以“无”代替。

sql如下:

SELECT
	i.id,
	i.name,
	i.parent_id,
	case when f.name is null then '无' else f.name end as parent_name
FROM
	info i
left join 
	info f 
ON 
	i.parent_id = f.id
WHERE
	1=1

可以看到,第二片段的sql与第一片段的sql区别在于,使用了 case-when-then

case when f.name is null then '无' else f.name end as parent_name

分析一下这段sql:


查询结果如下:



ok,完成!大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>