27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT *
FROM STUDENT AS S
WHERE NOT EXISTS(SELECT 1 FROM SC AS SC
JOIN COURSE AS C ON SC.C#=C.C#
WHERE S.S#=SC.S# AND CNAME NOT IN('程序设计','数据库'))
AND EXISTS(SELECT 1 FROM SC AS SC
WHERE S.S#=SC.S#
GROUP BY SC.S#
HAVING COUNT(SC.C#)=2)
with COURSE(C#,CNAME,T#) as
(
select 10001,'数据库','01' union all
select 10002,'程序设计','02' union all
select 10003,'C++编程','03' union all
select 10004,'Java程序设计','05' union all
select 10005,'软件工程','04' union all
select 10006,'科学发展观','06'
),SC(S#,C#,SCORE) as
(
select '2001',10001,90 union all
select '2002',10001,40 union all
select '2009',10003,78 union all
select '2003',10003,60 union all
select '2011',10006,100 union all
select '2002',10002,60 union all
select '2045',10002,68 union all
select '2008',10004,98 union all
select '2100',10006,76 union all
select '2102',10001,53
)
select y.S#
from COURSE x,SC y
where x.C# = y.C# and x.CNAME IN('数据库','程序设计')
GROUP BY y.S# HAVING COUNT(y.S#) = 2
select x.S#
from COURSE x,SC y
where x.C# = y.C# and x.CNAME IN('数据库','程序设计')
GROUP BY x.S# HAVING COUNT(x.S#) = 2
select S#
from SC x,
(select c#,COUNT(*) cou from COURSE WHERE CNAME in ('程序设计','数据库') GROUP BY c# HAVING COUNT(1) = 2) y
where x.c#=y.C#
SELECT *
FROM STUDENT AS S
WHERE NOT EXISTS(SELECT 1 FROM SC AS SC
JOIN COURSE AS C ON SC.C#=C.C#
WHERE S.S#=SC.S# AND CNAME NOT IN('程序设计','数据库'))
select s# from student s
where exists(
select s# from sc
where exists(select c# from course c where c#=sc.c# and cname in ('程序设计','数据库管理') ) and s#=s.s# group by s# having count(c#)=2)
SELECT S.S#
FROM STUDENT S
JOIN SC ON S.S#=SC.S#
JOIN COURSE C ON SC.C#=C.C#
GROUP BY S.S#
HAVING SUM(CASE WHEN C.CNAME IN('程序设计','数据库') THEN 1 END)=2
AND COUNT(C.C#)=2
另外,还可以用EXISTS NOT EXISTS