mysql的group_concat和if连用

背景: 一(表A:course_info 课程表)对多(表B:class_info班级表)的关系,想以A表为基准,查出符合条件的对应的多条记录。查出课程被删掉的,且其对应的“默认班级”(couse_info.deleted = 1 and class_info.name = ‘默认班级’)
假想: 最开始是想在where或者having中做筛选,但是因为并列的筛选条件有很多,不应该做统一的筛选;决定把筛选条件拿到 select 的if中,并对符合条件的项目进行拼接。
方案一:

select
				ci.course_name,
				ci.deleted,
				GROUP_CONCAT(if( ci.deleted = 1 and cl.class_name = '默认班级', cl.class_name, null))
				from
				course_info ci,
				class_info cl,
				course_class cc
				where
				ci.course_id = cc.course_id
				and cl.class_id = cc.class_id
				group by ci.id;

查询结果:
在这里插入图片描述

方案二:


select
				ci.course_name,
				ci.deleted,
				if( ci.deleted = 1 and cl.class_name = '默认班级', GROUP_CONCAT(cl.class_name), 0)
				from
				course_info ci,
				class_info cl,
				course_class cc
				where
				ci.course_id = cc.course_id
				and cl.class_id = cc.class_id
				group by ci.id;

查询结果:
在这里插入图片描述

可见方案一是对的。方案一:仅仅显示分组后符合条件的结果;方案二:分组后,组内有符合条件的结果就行,然后全部显示。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值