case when then 和Join 的使用,解决条件下,链接同数据表
业务场景:用户和管理员都可以向活动表中添加数据,表中有两个属性,creator_id存放创建者的id,create_type创建人类型,0用户,1管理员,
要求,根据creator_id获取到创建者的名称,方便展示。分别有用户表和管理员表
思路一(常规解决,不建议)
先查出所有数据,再使用java进行遍历,根据type的不同,再根据id查询数据,再将数据赋值,繁琐,低效!!!!
思路二使用sql中的case when 和join联表
case when then end 与If else 类似,不懂,请查询资料
SELECT act.*,
CASE
WHEN act.create_type=1 THEN sys.admin_name //联表查询需要的数据
WHEN act.create_type=0 THEN reg.name
ELSE 0 END AS createName //别名
FROM activity act
LEFT JOIN `system_user` sys ON act.creator_id=sys.sys_user_id //关联表
LEFT JOIN `reg_alumniuser` reg ON act.creator_id=reg.reg_alumniuserid //关联表