我有三个表,它们包含一组完整的数据,这些数据已通过应用程序功能导入到我的数据库中。 我想将此数据与用于执行导入的另一个表(exam_import)进行比较。但我一直在重复记录。
exams_import ip
exams e
students s
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