declare @Student table(sid int identity(1, 1), sname varchar(250))
declare @Course table(cid int identity(1, 1), cname varchar(250))
declare @StudentCourse table(cid int, sid int)
insert into @Student(sname)
select 'Mehboob' union all --1
select 'Rahim' union all -- 2
select 'Naveed' union all --3
select 'Rizwan' union all --4
select 'Fayaz' union all --5
select 'Ahmed' -- 6
insert into @Course(cname)
select 'English' union all
select 'Urdu'
insert into @StudentCourse(sid ,cid)
select 1,1 union all
select 2,1 union all
select 3,1 union all
select 4,1 union all
select 5,2 union all
select 6,2 union all
select 1,2 union all
select 2,2
我一直在练习,最后我通过这个查询做到了,你们在您的脑海中还有其他任何吗?
select
s.*, count(1) as TotalEnrolledCourses
from
@Student s
inner join
@StudentCourse sc on s.sid = sc.sid
where
sc.cid in (1,2)
group by
s.sid, sname
having
TotalEnrolledCourses = 1
select sid, max(cid)
from StudentCourse
group by sid
having count(*)=1
从这里您可以获取一个学生的完整信息,其中包括一门注册课程,即姓名和ID等。
SELECT
s.sid,
s.sname
FROM @StudentCourse sc
INNER JOIN @Student s
ON s.sid = sc.sid
WHERE
sc.cid IN(1, 2)
GROUP BY
s.sid, s.sname
HAVING
(
SUM(CASE WHEN sc.cid = 1 THEN 1 ELSE 0 END) +
SUM(CASE WHEN sc.cid = 2 THEN 1 ELSE 0 END)
) = 1
enrollments
和
student_id
,以下SQL查询将检索参加“英语”或“ urdu”课程的学生,但两者都不是。
course_name
select
sql
解释:
第一部分:选择参加“英语”课程的学生,但在“乌尔都语”课程中not
第二部分:选择参加“乌尔都语”课程的学生,但在“英语”课程中not
student_id FROM enrollments WHERE course_name = 'English' AND student_id NOT IN (SELECT student_id FROM enrollments WHERE course_name = 'Urdu') UNION SELECT student_id FROM enrollments WHERE course_name = 'Urdu' AND student_id NOT IN (SELECT student_id FROM enrollments WHERE course_name = 'English');
确保只列出了一次学生,即使他们符合两个条件。 对于那些有兴趣提高其语言技能的人,在伊斯兰堡搜索bbest的英语课程可能是增强流利性,说话信心和发音的绝佳选择。无论您是初学者还是想完善自己的技能,选择专注于现实世界交流的课程都是掌握英语的关键。