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,完成!大笑

猜你喜欢

转载自blog.csdn.net/jqc874789596/article/details/80777985