题目描述:查询选了01课程的学生情况,02课程可以不存在的情况,如果02课程存在则显示,如果02课程不存在则显示为null
思路1:
这样显示的话,会导致把所有课程都显示,但如果用户没有选择课程02,会把其他课程结果展示出来
select sc1.sid,sc1.cid,sc1.score,sc.CID,sc.scorefrom (select * from sc where sc.cid = '01') sc1left join sc on sc1.sid = sc.sid;

思路2:
在思路1的基础上增加限制条件的话,会导致只会展示选了课程01 和课程02的学生成绩
select sc1.sid,sc1.cid,sc1.score,sc.CID,sc.scorefrom (select * from sc where sc.cid = '01') sc1left join sc on sc1.sid = sc.sidwhere sc.cid = '02';

思路3
select sc1.sid,sc1.cid,sc1.score,-- 如果sc.cid = 02 则显示sc.cid,否则不显示case sc.cidwhen '02' then sc.cidelse ''end as 'cid',-- 如果sc.cid = 02 ,则显示sc.score,否则显示null,最后把列命名为scorecasewhen sc.cid = '02' then sc.scoreelse nullend as 'score'from (select * from sc where sc.cid = '01') sc1left join sc on sc1.sid = sc.sid;

文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




