2017-08-31 69 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