我在MS Access中有一个包含4列的表,它们都包含一个id,它是另一个表中的主键,我想知道是否有其他方法可以执行此操作,如果不是,我怎么能得到访问让我加入这些没有错误,它无法告诉我想要加入的东西。几乎这些id是学生表的一部分,它们包含用于该块的主管的ID,并且有4个块,我需要能够跟踪每个主管对每个块的学生。
主管表:
CREATE TABLE supervisors
( id NUMBER primary key
, last_name TEXT
, first_name TEXT
, mi TEXT
, m_number TEXT
, email HYPERLINK
, status TEXT
, notes MEMO
) ;
学生表:
CREATE TABLE students
( id NUMBER primary key
, last_name TEXT
, first_name TEXT
, mi TEXT
, m_number TEXT
, email HYPERLINK
, blk1_supervisor_id NUMBER
, blk2_supervisor_id NUMBER
, blk3_supervisor_id NUMBER
, blk4_supervisor_id NUMBER
) ;
我无法让它让blk1,2,3,4字段的外键到管理程序表,更不用说同时执行连接了blk1_supervisor_id和blk2_supervisor_id。
答案 0 :(得分:1)
不知道你的表架构,这是我能为你做的最好的......
SELECT SV.Name, S.Name, SB.Block
FROM Students as S
INNER JOIN Student_Blocks AS SB
ON S.StudentID = SB.StudentID
INNER JOIN Supervisors AS SV
ON SB.Block1SupervisorID = SV.SupervisorID
AND SB.Block2SupervisorID = SV.SupervisorID
AND SB.Block3SupervisorID = SV.SupervisorID
AND SB.Block4SupervisorID = SV.SupervisorID
ORDER BY SB.Block
答案 1 :(得分:0)
您可以保持您的主管表现在,让学生表只有真正的学生属性(下至电子邮件)。然后你创建一个StudentsSupervisor关系表:
CREATE TABLE StudentsSupervisors
( StudentId NUMBER
SupervisorId Number )
其中两个字段构成PK。如果您需要进一步确定关系,您可以将blockNumber
添加到该表中,并最终将其包含在PK中,如果相同的SuperVisor可以在不同的块中连接到同一个学生两次。
答案 2 :(得分:-1)
一种快速简便的方法来正确规范表。从下面的每个语句中选择一个选项。 一个学生可以没有/只有一个/很多主管。 主管可以没有/只有一个/很多学生。 在您的情况下,一个学生可以有很多主管,而一个主管可以有很多学生。因此,学生与指导者之间的关系是多对多的,这在RDBMS中是不允许的。在这种情况下,您必须在Patrick之间创建一个联接表,如Patrick Honorez所示。