2016-04-01 14 views
-1
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') 
) 

Öğrenci tablosu, ders tablosu ve sc tablosuyla (seçmeli dersler) birlikte mysql veritabanı oluşturuyorum, sid = "02" öğrencilerine aynı dersi öğrenen öğrenciler sid; ancak yukarıdaki sql doğru değil , "Neden? Nasıl düzeltilir??"sid = "02" öğrencilerinin aynı dersi öğrenen öğrenciler sid;

+0

Soruyu yeniden denemeyi denediniz mi, sorgunuzun ne yapmasını istediğinizi biraz açık değil – Jester

cevap

0

istediğin bu mu?

http://sqlfiddle.com/#!9/1d6a1/4

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' 

Ayrıca bir öneri o satır ve karşılaştırmalar miktarı büyük büyüyünce çok yavaş sorgulama yapar, anahtarları olarak dizeleri kullanılan değildir.

+0

Bunu deneyebilir misiniz? – Jester

İlgili konular