0
TB 1 : user_profile as ur-> id(PK),name (total 4k records all unique)    
TB 2 : user_course_rel as ucr-> id,course_id,year_id,division,user_id(Fk)    
TB 3 : students_attendance_lect as sal-> id,subject_id,date,student_id(Fk)    
student_id(Fk) = user_id(Fk) = id(PK).

TB1に参加したままにして、特定のコース、年、部門に属するすべての学生の名前と、132の一意のレコードである必要がある出席者ではなく、主題と日付の両方の出席者の名前を取得したいと思います。
次のクエリを実行した後、合計(4kレコード)を取得しています

select distinct(ur.id), ur.fname
from user_profile as ur
inner join user_course_rel as ucr
    on ucr.user_id=ur.id
left join students_attendance_lect as sal
    on sal.student_id=ucr.user_id
    and ucr.course_id=1
    and ucr.year_id=1
    and ucr.division=3
    and sal.subject_id=2
    and sal.date='2013-01-21'
4

1 に答える 1

1

LEFT JOINのいくつかの項目は、WHERE句に含める必要があるように見えます。私はあなたの質問が何であるかを100%明確ではありませんが、試してみてください:

select distinct(ur.id), ur.fname
from user_profile as ur
inner join user_course_rel as ucr
    on ucr.user_id=ur.id
left join
    (SELECT sal.student_id, sal.subject_id, sal.date
     FROM students_attendance_lect as sal
     WHERE sal.date='2013-01-21'
     AND sal.subject_id = 2) AS sa
    ON sa.student_id=ucr.user_id
WHERE ucr.course_id=1
    and ucr.year_id=1
    and ucr.division=3

あなたが書いた方法は、コースIDが1、ディビジョンが3、サブジェクトIDが2、または日付が「2013-01-21」の行でDBにLEFTJOINを要求することでした。

于 2013-01-27T18:25:01.170 に答える