2017-08-31 7 views
0

学生SQL-すべてのモジュールに登録されている学生名を選択するにはどうすればいいですか?学生による

+------+-------+--------------------------------------+ 
| Sid | sName | content        | 
+------+-------+--------------------------------------+ 
| 1 | Tim | ...         | 
| 2 | boyo | ...         | 
| 3 | Carl | ...         | 
| 4 | Life | ...         | 
+------+-------+--------------------------------------+ 

モジュール

+------+-------+--------------------------------------+ 
| mID | mName | content        | 
+------+-------+--------------------------------------+ 
| 1 | Data | ...         | 
| 2 | IT | ...         | 
| 3 | Math | ...         | 
|  |  | ...         | 
+------+-------+--------------------------------------+ 

登録

+------+-------+--------------------------------------+ 
| sID | mID | content        | 
+------+-------+--------------------------------------+ 
| 1 | 1  | ...         | 
| 1 | 2  | ...         | 
| 1 | 3  | ...         | 
| 3 | 1  | ...         | 
+------+-------+--------------------------------------+ 
+0

あなたが問題を解決するために、これまで何を試したことがありますか? –

+0

sIDとmIDのテーブルを結合する必要があります。まだ何か試しましたか? –

+0

SQLを試してみましたが、動作しませんでしたが、今のところいくつかの変更を行い、動作しているかどうかを確認してください。 – lifeishard

答えて

1

グループあなたのデータおよびモジュールは、総

であるとして登録され、同じモジュール数を持つものだけを取ります
select s.sname 
from students s 
join Registration r on s.sid = r.sid 
group by s.sname 
having count(r.mid) = (select count(mid) from modules) 
0

あなたがSIDおよびNAMEによってグループ分け、このクエリを試すことができます。

CREATE TABLE STUD (SID INT, SNAME VARCHAR(20)); 
CREATE TABLE MODU (MID INT, MNAME VARCHAR(20)); 
CREATE TABLE REGI (SID INT, MID INT); 
INSERT INTO STUD VALUES (1,'Tim'); 
INSERT INTO STUD VALUES (2,'Boyo'); 
INSERT INTO STUD VALUES (3,'Karl'); 
INSERT INTO STUD VALUES (4,'Life'); 
INSERT INTO STUD VALUES (5,'Tim'); 
INSERT INTO MODU VALUES (1,'Data'); 
INSERT INTO MODU VALUES (2,'IT'); 
INSERT INTO MODU VALUES (3,'Math'); 

INSERT INTO REGI VALUES (1,1); 
INSERT INTO REGI VALUES (1,2); 
INSERT INTO REGI VALUES (1,3); 
INSERT INTO REGI VALUES (3,1); 
INSERT INTO REGI VALUES (5,1); 
INSERT INTO REGI VALUES (5,2); 
INSERT INTO REGI VALUES (5,3); 


SELECT A.SID, A.SNAME 
FROM STUD A 
INNER JOIN REGI B ON A.SID = B.SID 
GROUP BY A.SID, A.SNAME 
HAVING COUNT(*) = (SELECT COUNT(*) AS RC_MODULES FROM MODU) 
; 

出力:

SID SNAME 
1 1 Tim 
2 5 Tim 
関連する問題