Mysql 我想查询sid=";02“;学习同一课程的学生;

Mysql 我想查询sid=";02“;学习同一课程的学生;,mysql,database,Mysql,Database,我用student表、course表和sc表(选修课)创建mysql数据库,我想查询sid=“02”学习同一课程的学生学生sid; 但是上面的sql不正确,“为什么?如何修复它?”这就是您想要的吗 CREATE TABLE `student` ( `sid` varchar(5) NOT NULL DEFAULT '', `sname` varchar(10) NOT NULL, `age` date DEFAULT NULL, `sex` var

我用student表、course表和sc表(选修课)创建mysql数据库,我想查询sid=“02”学习同一课程的学生学生sid; 但是上面的sql不正确,“为什么?如何修复它?”

这就是您想要的吗

    CREATE TABLE `student` (
     `sid` varchar(5) NOT NULL DEFAULT '',
     `sname` varchar(10) NOT NULL,
     `age` date DEFAULT NULL,
     `sex` varchar(2) DEFAULT NULL,
     PRIMARY KEY (`sid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `teacher` (
     `tid` varchar(5) NOT NULL DEFAULT '',
     `tname` varchar(10) NOT NULL,
     PRIMARY KEY (`tid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `course` (
     `cid` varchar(5) NOT NULL DEFAULT '',
     `cname` varchar(10) NOT NULL,
     `tid` varchar(5) DEFAULT NULL,
     PRIMARY KEY (`cid`),
     KEY `fk_tid` (`tid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


    CREATE TABLE `sc` (
     `sid` varchar(5) NOT NULL DEFAULT '',
     `cid` varchar(5) NOT NULL DEFAULT '',
     `score` float DEFAULT NULL,
     PRIMARY KEY (`sid`,`cid`),
     KEY `fk_cid` (`cid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    INSERT  INTO  student VALUES ('01' , 'student A' , '1990-01-01', 'M');
    INSERT  INTO  student VALUES ('02' , 'student B' , '1990-12-21', 'M');
    INSERT  INTO  student VALUES ('03' , 'student C' , '1990-05-20', 'M');
    INSERT  INTO  student VALUES ('04' , 'student D' , '1990-08-06', 'M');
    INSERT  INTO  student VALUES ('05' , 'student E' , '1991-12-01', 'FM');
    INSERT  INTO  student VALUES ('06' , 'student F' , '1992-03-01', 'FM');
    INSERT  INTO  student VALUES ('07' , 'student G' , '1989-07-01', 'FM');
    INSERT  INTO  student VALUES ('08' , 'student H' , '1990-01-20', 'FM');

    INSERT  INTO  teacher VALUES ('01' , 'teacher A');
    INSERT  INTO  teacher VALUES ('02' , 'teacher B');
    INSERT  INTO  teacher VALUES ('03' , 'teacher C');

    INSERT  INTO  course VALUES ('01' , 'JAVA' , '01');
    INSERT  INTO  course VALUES ('02' , 'Python' , '02');
    INSERT  INTO  course VALUES ('03' , 'Mysql' , '03');
    INSERT  INTO  course VALUES ('04' , 'PHP' , '01');

    INSERT  INTO  sc VALUES ('01' , '01' , 80);
    INSERT  INTO  sc VALUES ('01' , '02' , 90);
    INSERT  INTO  sc VALUES ('01' , '03' , 99);
    INSERT  INTO  sc VALUES ('01' , '04' , 88);
    INSERT  INTO  sc VALUES ('02' , '01' , 70);
    INSERT  INTO  sc VALUES ('02' , '02' , 60);
    INSERT  INTO  sc VALUES ('02' , '03' , 80);
    INSERT  INTO  sc VALUES ('03' , '01' , 80);
    INSERT  INTO  sc VALUES ('03' , '02' , 80);
    INSERT  INTO  sc VALUES ('03' , '03' , 80);
    INSERT  INTO  sc VALUES ('04' , '01' , 50);
    INSERT  INTO  sc VALUES ('04' , '02' , 30);
    INSERT  INTO  sc VALUES ('04' , '03' , 20);
    INSERT  INTO  sc VALUES ('05' , '01' , 76);
    INSERT  INTO  sc VALUES ('05' , '02' , 87);
    INSERT  INTO  sc VALUES ('06' , '01' , 31);
    INSERT  INTO  sc VALUES ('06' , '03' , 34);
    INSERT  INTO  sc VALUES ('07' , '02' , 89);
    INSERT  INTO  sc VALUES ('07' , '03' , 98);


select * from enter code here
student where sid in (
  select sid from sc 
  where cid in (select cid from sc where sid = '02')
  group by sid 
  having count(*) = (select count(*) from sc where sid = '02')
)


还有一个建议是不要使用字符串作为键,当行数和比较数增加时,这会使查询速度减慢。

请尝试重新表述这个问题,我不太清楚您希望查询做什么
SELECT DISTINCT s2.*
FROM student
JOIN sc ON sc.sid = student.sid
JOIN sc AS sc2 ON sc2.cid = sc.cid
JOIN student AS s2 ON s2.sid = sc2.sid
WHERE student.sid = '02'