长时间读者第一次发布海报。
我看起来像是一个直接的访问问题。
我有一个带有这些字段的员工表;
|雇员| 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,这可能会变得很尴尬(例如,关闭,验证等)
答案 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。很抱歉非访问语法,但希望您可以转换!