2011-08-29 64 views
0

我有一个MS Access中有4列的表,它们都包含一个ID,它是另一个表中的主键,我想知道是否有另一种方法要做到这一点,如果没有,我怎么能得到Access让我加入这些没有错误,它不能告诉我想加入。几乎所有这些ID都是学生表的一部分,他们包含了他们的主管的ID,并且有4个块,我需要能够跟踪每个主管每个块的学生。有多个外键到同一个表的MS Access Table

监事表:

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。

+2

请发表您的表与列名称的描述。谢谢 – PaulStock

+0

有没有另外一种方法来做什么?你的问题对我来说不是很清楚,请澄清你的问题... – ain

回答

0

你可以把你的监事表,因为它是现在,有一个只有真正的学生性质的学生表(到电子邮件)。然后创建一个StudentsSupervisor关系表:

CREATE TABLE StudentsSupervisors 
(StudentId NUMBER 
    SupervisorId Number) 

其中两个字段构成PK。如果您需要进一步确定这种关系,您可以将blockNumber添加到该表中,并且如果同一个SuperVisor可以在不同的块中两次链接到相同的学生,那么最终将它包括在PK中。

+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 
+0

谢谢我得到了这个与我们的旧数据库表一起工作。 –