我會嘗試我想:
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);
如何描述在你的表的模式問題,以便我們更好地瞭解數據的結構? – Jeshurun 2012-07-22 19:27:41
所有關聯的表? – 2012-07-22 19:28:24
是的,因爲你有很多子查詢,因此很難看到它們中的哪一個返回多於一行。或者,您可以嘗試獨立運行子查詢,並查看它們中的任何一個是否返回多行。 – Jeshurun 2012-07-22 19:29:31