2011-10-25 34 views
0

我有一个表单,它在提交时会将输入的数据输出到表单中,并将其输出到查询结果中。如果文本框为空,它将搜索该特定字段的所有数据。目前我的查询输出:查询输出比它应该做的更多的行,这是为什么?

SessionId  ModuleId  CourseId ClassId StudentUsername TeacherUsername Grade 
ABB   CHT2520  INFO101 104  u0867587   m.prigmore  A 
ABB   CHI2550  INFO101 101  u0867587   j.lu    A 
ABB   CHI2550  INFO101 104  u1231231   j.lu    F 
ABB   CHT2520  INFO101 101  u1231231   m.prigmore  F 
NVK   CHI2550  INFO101 101  u0867587   j.lu    F 
RMI   CHI2565  INFO101 102  u0660663   j.forden   F 

它正在输出更多的行,然后它应该这样做。一个学生属于同一个班级的一个单元。问题在于它显示一个学生属于两个班级,因为一个模块不正确。它这样做的原因是因为它根据学生正在学习的模块来识别学生所在的班级。

因此,如果模块'CHI2550'有两个班级,任何需要模块'CHI2550'的学生被分配到两个班级,但应该是一个班级的学生被分配到一个班级,并且应该由'StudentClass'表。问题是,如果我在其中一个JOINS中包含'StudentClass',则查询输出9行。

查询应的输出这样的:

SessionId  ModuleId  CourseId ClassId StudentUsername TeacherUsername Grade 
    ABB   CHI2550  INFO101 101  u0867587   j.lu    A 
    ABB   CHI2550  INFO101 104  u1231231   j.lu    F 
    NVK   CHT2520  INFO101 103  u0867587   m.prigmore  F 
    RMI   CHI2565  INFO101 102  u0660663   j.forden   F 

我怎样才能得到查询到输出上面的结果呢?下面是查询:

​​

下面是每个表和它们的数据(因为我所面临的问题,最重要的表是StudentClass,班,学生,模块):

Course Table: 

CourseId   CourseName           Duration 
INFO101   Bsc Information Communication Technology (ICT)   3/4 

CourseModule Table: 

CourseId  ModuleId 
INFO101  CHI2550 
INFO101  CHI2565 
INFO101  CHT2520 

Module Table: 

ModuleId   ModuleName         Credits 
CHT2520   Advanced Web Programming      20 
CHI2565   E-Commerce Business and Technology    20 
CHI2550   Modern Database Applications     20 

Session Table: 

SessionId ModuleId Semester SessionDate SessionTime TeacherId Room  Building 

NVQ  CHT2520  Spring 2011-03-21 13:00:00  T2  CW2/04 Canalside West 
NVK  CHT2520  Fall  2011-11-10 10:00:00  T2  CW2/04 Canalside West 
RMI  CHI2565  Fall  2011-09-13 12:00:00  T5  CW5/01 Canalside West 
RMT  CHI2565  Spring 2011-03-29 14:00:00  T2  CW2/04 Canalside West 
ABB  CHI2550  Spring 2011-03-15 12:00:00  T1  CW4/10 Canalside West 
ABH  CHI2550  Summer 2011-05-03 15:00:00  T4  CW4/10 Canalside West 

Grade_Report Table: 

StudentId SessionId Grade Mark 
S1   NVK   F  5 
S2   ABB   A  80 
S1   ABB   A  80 
S3   RMI   F  0 

Student Table: 

StudentId StudentForename  StudentSurname Year StudentUsername CourseId 
S1   Mayur     Patel   3  u0867587   INFO101 
S2   Jim     Carlton   3  u1231231   INFO101 
S3   Ahmed     Seedat   3  u0660663   INFO101 
S4   Amar     Barot   3  u0954857   INFO101 
S5   Richard    Davies   3  u0877223   INFO101 

StudentClass Table: 

ClassId StudentId 
101  S1 
102  S3 
103  S1 
104  S2 


    Class Table: 

ClassId Room  ClassDay  ClassTime  ModuleId  CourseId  TeacherId 
101  CW4/10 Thursday  10:00:00  CHI2550  INFO101   T1 
102  CW5/01 Wednesday  12:00:00  CHI2565  INFO101   T5 
103  CW2/04 Monday   15:00:00  CHT2520  INFO101   T2 
104  CW4/10 Thursday  11:00:00  CHI2550  INFO101   T1 


Teacher Table: 

TeacherId TeacherForename TeacherSurname TeacherUsername TeacherPassword 
T1   Joan   Lu    j.lu    scomp21 
T2   Martyn   Prigmore  m.prigmore  prigmore36 
T3   Arshard   Ali    a.ali   aliict 
T4   Paul   Judge   p.judge   data01 
T5   John   Forden   j.forden   hudds_10 

回答

0

我会被启动将查询更改为单个表查询,并确保从中获得所需内容,然后每次添加一个表,直到重复行开始显示。

我最好的猜测是你有一对你需要在两个字段而不是一个字段上连接的表,并且单个字段连接匹配连接表中的多个行,从而产生额外的行在你的输出中。

另一种可能性是,您有一个表中有重复行信息导致重复结果。

CourseModule表可能是这个问题在两种情况下...

这是很难看到你的问题,以及要求它是精确的分辨率,因为有大量的表格和许多加入...

相关问题