Search code examples
mysqlsqlmysql-error-1242

Cant get a query running


I have to find a result based on the following tables

Students StudentPapersSelection as sps StudentGroupManagegemt as sgm Internal Data as iars

From student I need students rollno and name where iars's paperid = sps's paperid and iars groupid= sgm group id and students id should be based on the previous two things.

The query I am running is:

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

It says query returning more than 1 rows. I hate this problem.


Solution

  • I'll try I guess:

    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
    

    Assuming tables like this:

    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
    

    And data like this:

    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);