SQL查询"相同"问题 返回

Sql论坛 沟通中
4 1994

我有2张表:student(s_id, s_name), score(s_id, c_id, s_score),请问我要如何写出SQL查询找出和'05'号学生选修相同科目的学生?

热忱回答4

  • fate sta fate sta VIP0
    2025/2/10

    SELECT DISTINCT s.s_id, s.s_nameFROM student sJOIN score sc ON s.s_id = sc.s_idWHERE sc.c_id IN (    SELECT c_id    FROM score    WHERE s_id = '05')AND s.s_id <> '05';

    0 回复
  • @fate sta:感谢您的解答,但实测结果不正确!会把所有和"05"号学生修至少一门相同课程的学生都找出来。

    0 回复
  • create table student(s_id varchar(100),s_name varchar(100))
    create table score(s_id varchar(100), c_id varchar(100), s_score money)
    
    
    insert into student values('01','A1')
    insert into student values('02','A2')
    insert into student values('03','A3')
    insert into student values('04','A4')
    insert into student values('05','A5')
    
    --与05相同
    insert into score values('01','01',100)
    insert into score values('01','02',100)
    insert into score values('01','03',100)
    
    --比05少
    insert into score values('02','01',100)
    insert into score values('02','02',100)
    
    --比05多
    insert into score values('03','01',100)
    insert into score values('03','02',100)
    insert into score values('03','03',100)
    insert into score values('03','04',100)
    
    --数目相同但科目不同
    insert into score values('04','01',100)
    insert into score values('04','02',100)
    insert into score values('04','04',100)
    
    --05
    insert into score values('05','01',100)
    insert into score values('05','02',100)
    insert into score values('05','03',100)
    
    select a.s_id--,count(a.c_id),count(b.c_id) 
    from
    (--别人选的课
    select s_id,c_id
    from score
    where s_id <> '05'
    ) a
    left join
    (--05选的课
    select c_id
    from score
    where s_id = '05'
    ) b on a.c_id = b.c_id
    group by a.s_id
    having 
    count(a.c_id) = (select isnull(count(*),0) from score where s_id = '05') and
    count(b.c_id) = (select isnull(count(*),0) from score where s_id = '05')
    
    --如果可以步骤 可以把05的科目数量先求出


    0 回复
  • @咪咝忒杜:ISNULL()函数仅适用于SQL Server,可否改为较一般化的通用版本?谢谢!

    0 回复