2012-04-17 24 views
0

私のクエリです:(部屋115に会う5人の以上の学生が在籍していどちらかのすべてのクラスの名前を検索します。)は、私はあなたが私に助けてくださいますMySQLでこのクエリを書きたい

CREATE TABLE STUDENT (
    sid NUMERIC(6) NOT NULL, 
    sname VARCHAR(15), 
    major VARCHAR(20), 
    level VARCHAR(2), 
    sage NUMERIC(2) NOT NULL, 
    PRIMARY KEY (sid) 
    ); 
CREATE TABLE CLASS(
    cnum VARCHAR(6), 
    meets_at TIME, 
    room VARCHAR(6), 
    fid NUMERIC(6) , 
    PRIMARY KEY (cnum), 
    FOREIGN KEY (fid) 
    references FACULTY (fid)  
    ); 
CREATE TABLE ENROLLED ( 
    cnum VARCHAR(6), 
    sid NUMERIC(6) NOT NULL, 
    PRIMARY KEY (cnum,sid), 
    FOREIGN KEY (sid) 
     REFERENCES STUDENT (sid), 
     FOREIGN KEY (sid) 
     REFERENCES FACULTY (fid), 
     FOREIGN KEY (cnum) 
     REFERENCES CLASS (cnum)   
    ); 
    alter table ENROLLED 
    add foreign key (sid) 
    references STUDENT (sid); 
+3

自分で試したことがありますか?何を試しましたか? – Jon

+0

...あなたの宿題? –

答えて

0
SELECT `sid`, `cid` 
FROM (`STUDENT` INNER JOIN `ENROLLED` ON `STUDENT`.`sid` = `ENROLLED`.`sid`) 
    INNER JOIN `CLASS` ON `ENROLLED`.`cnum` = `CLASS`.`cnum` 
GROUP BY `ENROLLED`.`cid` 
HAVING 
    `CLASS`.`room` = '115' OR 
    COUNT(DISTINCT `STUDENT`.`sid`) >= 5 
1

たぶんこのような何か:

SELECT 
    * 
FROM 
    CLASS 
WHERE 
    CLASS.room='115' 
    OR 
    (
     SELECT 
      COUNT(*) 
     FROM 
      ENROLLED 
      JOIN STUDENT 
       ON ENROLLED.sid=STUDENT.sid 
     WHERE 
      ENROLLED.cnum=CLASS.cnum 
    )>=5 
+0

そんなにありがとう.......その仕事 –

+0

あなたは答えを受け入れることができますか?また、あなたが良いと思う答えを投票することを忘れないでください。それは私たちにすべてのあいまいな感情を与える:P – Arion

+0

:確かに... –

関連する問題