2016-12-31 66 views
0

我有20个表(主题列表),具有与下面相同的表结构。如何在存在空值时查询多个左连接表

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

然后我有如下另一个表result_summary

|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

有数据从表't1和t2'中获取,这在表't3'中不会出现。运行查询返回零行,但假设返回一行。 – 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' 
     );