2012-07-22 53 views
1

我必須要找到根據下表的結果不能得到運行

學生 StudentPapersSelection爲SPS StudentGroupManagegemt爲SGM 內部數據作爲IARS

從學生,我要求學生rollno和名稱,其中查詢iars's paperid = sps的paperid和iars groupid = sgm group id和學生id應該基於前兩件事情。

我的計算機運行的查詢是:

select students.rollno, students.name 
from students,sps,iars,sgm 
where iars.id=1 
and students.studentid=(select studentid 
         from sps where sps.paperid=iars.paperid 
         and iars.id=1) 
and students.studentid=(select studentid 
         from sgm 
         where sgm.groupid=iars.groupid 
         and iars.id=1) 
and students.course=iars.courseid 
and students.semester=iars.semester 

它說,查詢返回超過1行。我討厭這個問題。

+0

如何描述在你的表的模式問題,以便我們更好地瞭解數據的結構? – Jeshurun 2012-07-22 19:27:41

+0

所有關聯的表? – 2012-07-22 19:28:24

+1

是的,因爲你有很多子查詢,因此很難看到它們中的哪一個返回多於一行。或者,您可以嘗試獨立運行子查詢,並查看它們中的任何一個是否返回多行。 – Jeshurun 2012-07-22 19:29:31

回答

0

我會嘗試我想:

select students.rollno, 
     students.name 
from iars, students join sps on students.studentid = sps.studentid 
     join sgm on students.studentid = sgm.studentid 
where iars.id = 1 
and  sps.paperid=iars.paperid 
and  sgm.groupid=iars.groupid 
and  students.course = iars.courseid 
and  students.semester = iars.semester 

假設表是這樣的:

CREATE TABLE `students` (
    `studentid` int(11) NOT NULL AUTO_INCREMENT, 
    `rollno` int(11) DEFAULT NULL, 
    `name` varchar(255) DEFAULT NULL, 
    `course` int(11) DEFAULT NULL, 
    `semester` int(11) DEFAULT NULL, 
    PRIMARY KEY (`studentid`) 
) ENGINE=InnoDB AUTO_INCREMENT=66820 DEFAULT CHARSET=latin1 


CREATE TABLE `sps` (
    `studentid` int(11) NOT NULL AUTO_INCREMENT, 
    `paperid` int(11) DEFAULT NULL, 
    PRIMARY KEY (`studentid`) 
) ENGINE=InnoDB AUTO_INCREMENT=66820 DEFAULT CHARSET=latin1 


CREATE TABLE `sgm` (
    `studentid` int(11) NOT NULL AUTO_INCREMENT, 
    `groupid` int(11) DEFAULT NULL, 
    PRIMARY KEY (`studentid`) 
) ENGINE=InnoDB AUTO_INCREMENT=66820 DEFAULT CHARSET=latin1 


CREATE TABLE `iars` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `paperid` int(11) DEFAULT NULL, 
    `groupid` int(11) DEFAULT NULL, 
    `courseid` int(11) DEFAULT NULL, 
    `semester` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=66820 DEFAULT CHARSET=latin1 

和數據是這樣的:

insert into students values (1,1,'a',1,1); 
insert into students values (2,1,'b',1,1); 
insert into iars values(1,1,1,1,1); 
insert into sgm values (1,1); 
insert into sps values (1,1); 
+0

非常感謝,希望它對我來說很簡單,真的,謝謝:) – 2012-07-22 20:39:14

0

從您的意見,並從你的問題的有限信息看,似乎你想要做的,而不是

...students.studentid=(select studentid ...

什麼是

...students.studentid in(select studentid ...

更換兩occurances所以你的查詢應該是這樣的:

select students.rollno, students.name from students,sps,iars,sgm where iars.id=1 
    and students.studentid in (select studentid from sps 
     where sps.paperid=iars.paperid and iars.id=1) 
    and students.studentid in (select studentid from sgm 
     where sgm.groupid=iars.groupid and iars.id=1) 
    and students.course=iars.courseid 
    and students.semester=iars.semester 
+0

我想要的是它應該從學生表學生應該在A組和學習論文2,而paperno和groupno將取決於iars表,這將匹配他們從sps和sgm表 – 2012-07-22 19:48:25

+0

您是否嘗試過我的更新答案? – Jeshurun 2012-07-22 19:54:03

+0

我沒有。任何東西,它停在「加載」 – 2012-07-22 19:56:57