我有两个表,“讲师”表和“部门”表。讲师可以参与许多部门,并且部门可以包含许多讲师。我试图填充DepartmentInstructor表以创建多对多关系。像这样填充表格,
部门表
DepartmentID DepartmentName
1 Aaron Copland School of Music
2 American Studies
3 Art
4 Classical, Middle Eastern, and Asian Languages and Cultures
5 Comparative Literature
6 Drama, Theatre & Dance
7 English
8 European Languages and Literatures
讲师表
InstructorID InstructorFullName
1 Abrams, Brian
2 Ciavarella, Peter
3 Franklin, Arnold
4 Shur, Mitchell
5 Reich, Toby
6 Meyers, Allison
7 Dana, Kathryn
8 Rhindress, Mindy
我想做的是
DepartmentInstructor表
DepartmentID InstructorID
1 3
3 7
2 7
6 4
编辑:
响应@GeorgeJoseph,我们还得到了一个表格,其中包含ID以外的所有数据。该表如下所示,
表X
Semester Sec Code Course(HR,CRD) Description Day Time Instructor Location Enrolled Limit ModeOfInstruction
Spring 2019 02 37366 ACCT 100 (3, 3) Fin & Mgr Acct T, TH 3:10 PM - 4:25 PM Milo, Michael KY 419 20 22 In-Person
Spring 2019 03 37823 ACCT 100 (3, 3) Fin & Mgr Acct M 3:10 PM - 6:00 PM Ho, Vivian HH 17 21 22 In-Person
Spring 2019 01 37365 ACCT 100 (3, 3) Fin & Mgr Acct T, TH 10:45 AM - 12:00 PM Milo, Michael KY 419 22 22 In-Person
Spring 2019 06 7351 ACCT 101 (4, 3) Int Theo & Prac Acct 1 T, TH 12:10 PM - 2:00 PM Feisullin, Anita RA 201 30 30 In-Person
Spring 2019 12 7357 ACCT 101 (4, 3) Int Theo & Prac Acct 1 SU 8:20 AM - 12:00 PM Mintz, Chana PH 204 39 55 In-Person
Spring 2019 11 7356 ACCT 101 (4, 3) Int Theo & Prac Acct 1 S 8:20 AM - 12:00 PM Chan, Joseph PH 110 54 55 In-Person
Spring 2019 10 7355 ACCT 101 (4, 3) Int Theo & Prac Acct 1 F 6:30 PM - 10:30 PM Solarsh, Eva PH 212 30 30 Hybrid
Spring 2019 09 7354 ACCT 101 (4, 3) Int Theo & Prac Acct 1 T, TH 8:50 PM - 10:30 PM Zapf, Michael PH 110 29 55 In-Person
我通过该表将数据添加到“教师表”和“部门”表中。我们将此表称为X。DepartmentName是通过使用Course(HR,CRD)列上的case语句创建的。
现在回答您的问题,表X应该帮助我们在教师和部门表之间形成多对多关系。我目前不确定如何映射关系。我试图做的就是这个,
SELECT DISTINCT [Description], Instructor
FROM Schema.X AS x
INNER JOIN [College].[Instructor] AS I
ON x.Instructor = I.InstructorFullName
这将给我教授教授的相应课程,但是我不确定如何从这里开始。
编辑2:
这是我的数据库设计的外观,
答案 0 :(得分:0)
正如George和您自己所提到的,您快到了。
我正在使用SQL Server / T-SQL
在我的示例中,您有一个课程表,一个教师表和一个部门表。
课程表必须以教师ID和部门ID作为列。
这是弥合所有表之间的差距的方法。这意味着您具有部门,课程(具有链接的部门和导师ID)的不同列表以及不同的导师列表。有一些考虑因素,一门课程有一位以上的导师(我想可能会发生),但要测试适合您的设置的课程。可能在具有相同departmentId和第二nd tutorID的课程中添加新行。
我在输出中添加了一些额外的列。
您还可以看到并非所有部门都为其分配了课程。资金不足!
还请注意,根据您所处的情况或where子句,我在内部可能会更好用左连接的情况下使用。 EG其中courseID不为null。
答案 1 :(得分:0)
好吧,通过一些反复试验并彻底读取数据。我已经找到了我认为是正确的解决方案,
INSERT INTO [College].[DepartmentInstructor]
(DepartmentInstructorID, DepartmentKey, InstructorKey)
SELECT
NEXT VALUE FOR [Project3].[SequenceObjectForDepartmentInstructorId],
DepartmentID,
InstructorID
FROM (
SELECT DISTINCT InstructorID, DepartmentID
FROM Uploadfile.CoursesSpring2019 AS CS
INNER JOIN [College].[Instructor] AS I
ON CS.Instructor = I.InstructorFullName
INNER JOIN [College].[Department] AS D
ON CS.[Course (hr, crd)] LIKE CONCAT('%', D.DepartmentName, '%')
) AS Result
我已经能够在项目中取得更大的进步,并且我已经完成了95%。我实际上偶然发现了一个类似的问题。如果您参考我发布的数据库设计,则课程表将需要多个表中的ID。这就是我想出的,
SELECT DISTINCT
TS.TimeSlotID,
I.InstructorID,
BL.BuildingLocationID,
C.CourseID
FROM Uploadfile.CoursesSpring2019 AS CS
INNER JOIN [College].[TimeSlot] AS TS
ON CS.[Time] = TS.[ClassHours]
INNER JOIN [College].[Instructor] AS I
ON CS.[Instructor] = I.[InstructorFullName]
INNER JOIN [College].[BuildingLocation] AS BL
ON CS.[Location] LIKE CONCAT( BL.[BuildingName], '%')
INNER JOIN [College].[Course] AS C
ON CS.[Course (hr, crd)] LIKE CONCAT(C.CourseName, '%')
这里的问题是此查询导致大约100万行。表X大约有4700行,这意味着我当前拥有的该查询距离我应该拥有的行数还很远。