>데이터 베이스 >MySQL 튜토리얼 >SQL问题:集合相等

SQL问题:集合相等

WBOY
WBOY원래의
2016-06-07 16:14:412058검색

假设有一张成绩表(score):字段如下: sid:学生学号, cid:课程编号, score:成绩 求所修课程完全相同的同学的学号。这个问题其实关键在于求课程集合相等的问题。 可以使用如下sql即可求出两个所修课程完全相同的同学的学号: select s1.sid,s2.sid fro

假设有一张成绩表(score):字段如下: sid:学生学号, cid:课程编号, score:成绩 求所修课程完全相同的同学的学号。这个问题其实关键在于求课程集合相等的问题。 可以使用如下sql即可求出两个所修课程完全相同的同学的学号:

select s1.sid,s2.sid from score s1 INNER JOIN score s2 ON
(s1.cid=s2.cid and s1.sid < s2.sid) GROUP BY s1.sid,s2.sid
        HAVING count(*) = (select count(*) from score where s1.sid=sid)
         AND
        count(*) = (select count(*) from score where s2.sid=sid);

集合相等的问题可以衍生出如求与学号002同学所修课程完全相同的其它同学的学号和姓名:

select st.sid,st.sname from student st where st.sid in ( select sc.sc_sid from ( select s1.sid,s2.sid as sc_sid from score s1 INNER JOIN score s2 ON
(s1.cid=s2.cid and s1.sid <> s2.sid and s1.sid='002')  GROUP BY s1.sid,s2.sid
 HAVING count(*) = (select count(*) from score where sid=s1.sid)
 and count(*) = (select count(*) from score where sid=s2.sid) ) sc );
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.