当前位置 博文首页 > Jqcode:mysql中自连接查询与case-when-then用法

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

    作者:[db:作者] 时间:2021-09-16 10:37

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

    先看一下数据表结构:


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

    cs
    下一篇:没有了