INNER JOIN导致NULL RECORD SET

时间:2016-01-22 16:39:01

标签: mysql

我正在使用MySQL。下面是我的SQL语句。 try { if(getIntent().getExtras().containsKey("your_parameter")) { btn.setVisibility(View.VISIBLE); } } catch(Exception e){ //... } 是我的交易表。这工作正常。但是当timetabledistribution表中有NULL的记录时,这会返回teacherId = NULL条记录。 我相信这是因为SQL语句中有timetabledistribution。 如果这些记录的teacherId = NULL,是否有可能避免或忽略此JOIN?或者任何其他更好的方式......

INNER JOIN teacher_profiles c ON a.teacherId = c.teacherId

我希望其他字段应该返回除了教师详细信息,因为该特定记录的teacherId为NULL。 但是查询忽略了整个记录。

SELECT 
    CONCAT(a.periodWeekDayId, '.', a.periodId) as Id, 
    a.periodId, 
    a.periodWeekDayId, 
    a.subjectId, 
    b.subjectShortName, 
    a.teacherId, 
    CONCAT(c.teacherFirstName , ' ', COALESCE(c.teacherMiddleName, ''), ' ', c.teacherLastName ) as teacherName , 
    e.classStd, 
    f.sectionName, 
    g.templateName, 
    h.periodLabel, 
    h.periodStartTime, 
    h.periodEndTime, 
    i.periodWeekDayName, 
    a.timeTableClassSectionId 
FROM timetabledistribution a 
    INNER JOIN subject_master b ON a.subjectId = b.subjectId 
    INNER JOIN teacher_profiles c ON a.teacherId = c.teacherId 
    INNER JOIN TimeTableClassSection d ON a.TimeTableClassSectionId = d.TimeTableClassSectionId 
    INNER JOIN class_master e ON d.classId = e.classId 
    INNER JOIN section_master f ON d.sectionId = f.sectionId 
    INNER JOIN TimeTableTemplate    g ON d.timeTableTemplateId = g.timeTableTemplateId 
    INNER JOIN templatePeriodStructure  h ON a.periodId = h.periodId 
    INNER JOIN templateWeekDaysStructure    i ON a.periodWeekDayId = i.periodWeekDayId 
WHERE A.TimeTableClassSectionId='46'

但是获得

Id  periodId    periodWeekDayId …..
1   12      1 

2 个答案:

答案 0 :(得分:1)

很高兴它帮助......

您是否尝试过将JOIN连接到教师档案中,然后改为........

LEFT OUTER JOIN teacher_profiles c ON a.teacherId = c.teacherId

答案 1 :(得分:0)

看到你从时间表分发表中驾驶这个肯定你可以简单地附加到where条件.... 所以它变成......

..
..
WHERE A.TimeTableClassSectionId='46'
AND A.teacherID IS NOT NULL