查询链接到同一主键的两个表

时间:2014-10-01 09:02:27

标签: sql ms-access foreign-keys primary-key

长时间读者第一次发布海报。

我看起来像是一个直接的访问问题。

我有一个带有这些字段的员工表;

|雇员| StaffName |电话|电子邮件|

EmployeeID是两个表中的外键 - 一个用于记录生成器的状态,即

| LogID |状态|记录者|

和一个用于生成器的任何事件

| IncidentID |描述|引发者| LogID |

我可以创建一个查询来链接事件及其日志详细信息,例如

| IncidentID |描述|引发者| LogID |记录者|

如果我将EmployeeID号码放入'Logged By'和'Raised By' - 如果我按照公司的要求放置StaffName,它就不起作用,因为它从同一个主键中选择了两个StaffNames。

有什么方法吗?

这是Access代码,LoggedBy和RaisedBy连接到EmployeeID的部分以粗体显示。

SELECT [2_Incidents] .IncidentID,[2_Incidents] .Description,[8_Employees] .StaffName AS [Raised By],[1_Log] .LogID,[8_Employees] .StaffName AS [Logged By]

FROM 8_Employees INNER JOIN(2_Incidents INNER JOIN 2_Incidents ON [1_Log] .LogID = [2_Incidents] .LogID) ON [8_Employees] .EmployeeID = [1_Log] .LoggedBy AND [8_Employees] .EmployeeID = [2_Incidents] .RaisedBy);

我通过创建Employees表的副本来解决这个问题,但如果将来有更多字段链接到Employees,这可能会变得很尴尬(例如,关闭,验证等)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,解决方案是两次加入员工表。

在您的日志详细信息中,您正在执行SELECT * FROM incident JOIN log USING (LogID) ...

之类的操作

你提到"从同一个主键中选择两个StaffNames" - 我认为你试图通过Raised By和Logged By以某种方式加入Employee。

如果您实际加入了两份员工:SELECT ... FROM incident JOIN log USING (LogId) JOIN employee ei ON (ei.employeeid = incident.raised_by) JOIN employee el ON (el.employeeid = log.logged_by),您可以参考ei.staffname(员工提出的事件)和el.staffname(员工记录)

PS。很抱歉非访问语法,但希望您可以转换!