在项目中用到了,以前没用过,记录一下日常。
先看一下数据表结构:
其中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,完成!