查询加入

时间:2012-11-15 03:58:17

标签: mysql sql join group-by

我正在运行查询:

select course.course,iars.id, 
        students.rollno,
        students.name as name,
        teachers.name as tname, 
        students.studentid, 
        attndata.studentid ,sum(attndata.obt) as obt
        sum(attndata.benefits) as ben , (sum(attndata.max)) as abc  
from  groups, students
        left join iars 
           on iars.id
        left join str 
           on str.studentid=students.studentid
        left join course
           on course.c_id=students.course
        left join teachers
           on teachers.id=iars.teacherid
        join sgm 
           on sgm.studentid=students.studentid
        left join attndata 
           on attndata.studentid=students.studentid and iars.id=attndata.iarsid
        left join sps 
           on sps.studentid=students.studentid and iars.paperid=sps.paperid
        left join semdef 
           on semdef.semesterid=str.semesterid 
        where students.course='1' 
           and students.status='regular' 
           and sps.paperid='5'
           and  iars.courseid=students.course 
           and iars.semester=str.semesterid 
           and semdef.month=9
           and iars.paperid='5'
           and str.semesterid='1'
           and str.sessionid='12'
           and groups.id=sgm.groupid 
        group by sps.studentid,
           teachers.id,
           semdef.month
        order by
           students.name

在此查询中,只要我在semdef.id=attndata.mon上保持联接,我就会在semdef.id=null的值得到零结果,但我想要所有结果,而不管semdef,但我想要用它。如果它应该获取结果,如果值为null。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

这可能是因为你的where子句在说

and semdef.month=9

你可能想要

and (semdef.month=9 OR semdef.id IS NULL)

或类似的东西。

答案 1 :(得分:1)

这是因为你的where子句有与semdef表相关的语句。将这些添加到join子句中,因为将它们放在暗示内连接的位置。

例如:

Left join semdef on xxx and semdef.id = attndata.min