2016-12-31 5 views
0

以下の表構造と同じ表構造を持つ20の表(件名のリスト)があります。nullが存在するときに複数の左結合表を照会する方法

列私は、以下のように別のテーブルresult_summary持っ

|id|student_id|result_session|result_term|result_arm|result_class|result_level|1st_test|2nd_test|exam|result_total|result_grade|result_remark| 

:私はそうのように私のクエリを記述する場合

|id|student_id|result_score|result_average|result_term|result_session|result_level|result_class|result_arm 

最小クエリ

SELECT  t2.`1st_test` AS agric1, t2.`2nd_test` AS agric2, t2.exam AS agricExam3, t2.result_total AS agricTotal, 
        t2.result_grade AS agricGrade, t3.`1st_test` AS basicsci1, t3.`2nd_test` AS basicsci2, t3.exam AS basicsciExam, 
        t3.result_total AS basicsciTotal, t3.result_grade AS basicsciGrade t2.result_remark AS agricRemark, t3.result_remark AS basicSciRemark 
FROM   ((result_summary AS t1 LEFT JOIN 
        agricultural_science AS t2 ON t1.student_id = t2.student_id) LEFT JOIN 
        basic_science AS t3 ON t1.student_id = t3.student_id) 
WHERE   (t1.student_id = '@studentID' AND t1.result_term = '@term' AND t1.result_session = '@session' AND t1.result_level = '@level' AND t1.result_class = '@resultClass') AND 
      (t2.student_id = '@studentID' AND t2.result_term = '@term' AND t2.result_session = '@session' AND t2.result_level = '@level' AND t2.result_class = '@resultClass') AND 
      (t3.student_id = '@studentID' AND t3.result_term = '@term' AND t3.result_session = '@session' AND t3.result_level = '@level' AND t3.result_class = '@resultClass') 

行は返されません。気になるところでは、テーブルt1 and t2にクエリデータと一致するデータがありますが、t3には該当しません。

希望の結果を得るためにクエリを書くにはどうすればよいですか?前もって感謝します。

+0

あなたの望ましい結果は何ですか? –

+0

テーブル 't3'にないテーブル 't1とt2'からフェッチするデータがあります。クエリを実行するとゼロの行が返されますが、1つの行が返されます。 – BlackPearl

答えて

1

t2t3テーブルのwhere句の条件によって、左結合がINNER JOINに変わります。

t2t3テーブルの条件は ONの代わり WHEREで定義する必要があります

select t2.`1st_test` as agric1, 
    t2.`2nd_test` as agric2, 
    t2.exam as agricExam3, 
    t2.result_total as agricTotal, 
    t2.result_grade as agricGrade, 
    t3.`1st_test` as basicsci1, 
    t3.`2nd_test` as basicsci2, 
    t3.exam as basicsciExam, 
    t3.result_total as basicsciTotal, 
    t3.result_grade as basicsciGrade t2.result_remark as agricRemark, 
    t3.result_remark as basicSciRemark 
from (
    (
     result_summary as t1 left join agricultural_science as t2 on t1.student_id = t2.student_id 
     ) left join basic_science as t3 on t1.student_id = t3.student_id 
     and (
      t3.student_id = '@studentID' 
      and t3.result_term = '@term' 
      and t3.result_session = '@session' 
      and t3.result_level = '@level' 
      and t3.result_class = '@resultClass' 
      ) 
     and (
      t2.student_id = '@studentID' 
      and t2.result_term = '@term' 
      and t2.result_session = '@session' 
      and t2.result_level = '@level' 
      and t2.result_class = '@resultClass' 
      ) 
    ) 
where (
     t1.student_id = '@studentID' 
     and t1.result_term = '@term' 
     and t1.result_session = '@session' 
     and t1.result_level = '@level' 
     and t1.result_class = '@resultClass' 
     ); 
関連する問題