0

私はクエリを実行しています:

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の場合は、結果をフェッチする必要があります。手伝ってくれませんか。

4

2 に答える 2

2

それはおそらくあなたのwhere句が言っているからです

and semdef.month=9

そして、あなたはおそらく望んでいます

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

または似たようなもの。

于 2012-11-15T04:21:23.523 に答える
1

where句にsemdefテーブルに関連するステートメントがあるためです。これらを内部結合を意味するwhereに配置するように、これらを結合句に追加します。

例えば:

Left join semdef on xxx and semdef.id = attndata.min
于 2012-11-15T04:20:32.293 に答える