针对多个表的Oracle sql连接

时间:2015-09-20 05:40:51

标签: sql oracle

我有三个表,它们包含一组完整的数据,这些数据已通过应用程序功能导入到我的数据库中。 我想将此数据与用于执行导入的另一个表(exam_import)进行比较。但我一直在重复记录。

  • 表1包含我的导入列表。 exams_import ip
  • 表2包含我的考试exams e
  • 表3包含我的学生students s
  • 表4包含我的学生ID' student_ids i

我想要的是这个

select s.student_name, i.my_student_id, e.exam_no, e.exam_descrip
from exams e
left join exams_import ip on ip.exam_no = e.exam_no
left join students s on s.student_db_uid = e.student_db_uid
left join student_ids i on s.internal_id = i.dbid

结果表应显示我导入的考试,因为他们在数据库中看到了学生姓名和分配的ID。 但我似乎得到了几个重复项,其中学生ID已从导入的列表中更改。

Student_Name    my_Student_ID   Exam No     Exam description

 1. Smith^David    12345        123         English_101 
 2. Smith^Bill     12346        124         English_101
 3. Jones^John     12789        225         Maths_201 
 4. Roberts^Stan   12885        ***456***   English_101
 5. Roberts^Stan   12885$$$1       ***456***   English_101
 6. Tripp^Malcolm  20144        566         English_101

一名学生可能参加很多考试。每个考试编号都是唯一的。每个考试编号应显示一条记录。请参见显示复制记录的粗体输出。 如果未满足匹配规则,学生应该只有一个新的唯一ID,并且应用程序已分配$$$后缀。否则他们会保留导入的ID。

示例数据

Exams Table  
 exam_no, exam_desc,    Student_db_uid, exam_date,   
 123    English_101     1001        15-02-2015  
 124    English_101     1002        15-02-2015  
 225    Maths_201       1003        16-02-2015  
 456    English_101     1004        15-02-2015  
 566    English_101     1005        15-02-2015  
 666    Science_101     1006        14-02-2015 

Students Table  
student_name,   internal_id, Student_db_uid, DOB  
Smith^David     2001        1001    10-01-94  
Smith^Bill      2002        1002    25-02-94  
Jones^John      2003        1003    19-12-94    
Roberts^Stan    2004        1004    16-12-93  
Tripp^Malcolm   2005        1005    12-09-94   
Roberts^Stanley 2006        1006    16-12-93

Student ID
my_student_id, internal_id, Student_db_uid, alt_id
12345       2001    1001    null  
12346       2002    1002    null  
12789       2003    1003    null  
12885       2004    1004    null  
12885$$$1   2006    1006    null  
20144       2005    1005    null  

Exams_import  
Student_id, student_name, exam_no, exam_desc, exam_date, DOB  
12345 Smith^David   123 English_101 15-02-2015 10-01-94  
12346 Smith^Bill    124 English_101 15-02-2015 25-02-94  
12789 Jones^John    225 Maths_201 16-02-2015 19-12-94  
12885 Roberts^Stan  456 English_101 15-02-2015 16-12-93  
20144 Tripp^Malcolm 566 English_101 15-02-2015 12-09-94  
12885 Roberts^Stanley 666 Science_101 14-02-2015 16-12-93  

0 个答案:

没有答案