sql中怎么实现如下查询: 学生01学了001,002俩课程,怎么查询出和学生01所学课程完全一样的同学

汗,看了各位的答案,但是忘了说,学生01修了001,002课程事先也不知道,也是查询出来的.原题是这么说的:查询和“01”号的同学学习的课程完全相同的其他同学学号和姓名;... 汗,看了各位的答案,但是忘了说,学生01修了001,002课程事先也不知道,也是查询出来的.原题是这么说的:
查询和“01”号的同学学习的课程完全相同的其他同学学号和姓名;
我思路是:先查询出01学生学了哪些课,查出来是001,002课程,但是这儿不能用等号啊,用in的话也不行,所以要各位解决的就是这个问题
展开
 我来答
百度网友f7ac9f0
2018-11-16
知道答主
回答量:1
采纳率:0%
帮助的人:812
展开全部
SELECT * FROM STUDENT WHERE SID IN
(SELECT a.SID FROM (SELECT SID,GROUP_CONCAT(CID ORDER BY CID ) AS gc FROM SC GROUP BY SID )a WHERE a.gc = (SELECT GROUP_CONCAT(CID ORDER BY CID) FROM SC WHERE SID = '01') AND a.SID <>'01')
解题思路:
STUDENT 为学生表 有 SID 和 其他学生信息
SC为成绩表 有 课程CID 和 SID 关联
先查SC 表 获取 SID 和 对应所选课程 按一定顺序排序的 CID 字符串的拼接(如 学号01 选了课程 01 02 03 那么对CID进行字符串拼接 成 学号 :01 gc:01,02,03 格式 )然后获取 01 学生的gc 字符串 , 再获取其他gc = 01 学生的gc 排除 01的 SID 最后 查 STUDENT 信息 根据获取的 SID 到此结束。
baiynijecym
推荐于2017-12-16 · TA获得超过1841个赞
知道大有可为答主
回答量:1411
采纳率:66%
帮助的人:1174万
展开全部
推荐答案查询出来的应该不是完全相同的,如要完全相同可使用如下写法试一下

create table #temp
(stu varchar(8) not null,
cau varchar(8) not null,
);

insert into #temp
select '01','003'
union
select '01','004'
insert into #temp
select '01','001'
union
select '01','002'
union
select '02','002'
union
select '02','003'
union
select '03','001'
union
select '03','002'
union
select '04','001'
union
select '04','002'
union
select '04','003'
union
select '04','004';

select a.stu from #temp a left join (select cau from #temp where stu = '01') b
on a.cau = b.cau
where a.stu <> '01'
group by stu
having COUNT(a.cau) = (select COUNT(*) from #temp where stu = '01') and COUNT(a.cau) = COUNT(b.cau) ;

结果03
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
roundfaceangle
2018-07-07
知道答主
回答量:1
采纳率:0%
帮助的人:857
展开全部
select distinct 课程
from student_info_view
where (课程 in (select 课程 from student_info_view where 学号='01') )
and
(课程 in (select 课程 from student_info_view where 学号='02'))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2012-08-06 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5184万
展开全部
查询学了001,002课程的全部学生,并排除01学生
你的思路没错啊,
select name from 学生表 where 学号 in (

select 学号 from table where 课程号 in(

select 课程号 from table where 学号='01') and 学号<>'01'

group by 学号 having count(课程号)=2)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
T雄鹰展翅
2012-08-06
知道答主
回答量:28
采纳率:0%
帮助的人:16.8万
展开全部
查询学习课程001,002的所有同学,并排除学生01
select * from 课程表 where 课程 in(001,002)
and 学生<>01

使用子查询啊
select 学生 from 课程表 where 课程 in(select * from 课程表 where 学生='01')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 6条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式