我在MS Access 2010中遇到了查询构建器的问题。我无法连接两个表,其中一个表有两个对另一个表的引用。我有一个表,Workers,有两列,HumanFactor1和HumanFactor2。这两个都指向表HumanFactors,它只包含两个字段,ID和HumanFactor。此表用于为用户填充两个组合框选择器,然后这些选择将作为FK存储在Worker中。
使用查询构建器,它会自动创建以下SQL
SELECT Incident.*, Worker.*
FROM HumanFactors RIGHT JOIN
(Incident LEFT JOIN Worker ON Incident.ID = Worker.IncidentID) ON
(HumanFactors.ID = Worker.HumanFactor2) AND (HumanFactors.ID = Worker.HumanFactor1)
WHERE (((HumanFactors.HumanFactor)="Fatigue"));
这不起作用,因为这两个在实践中总是会有所不同,所以唯一返回的结果是我强制两个HumanFactors都相同的记录。通过简单地更改为OR表达式
,这非常容易通过SQL修复SELECT Incident.*, Worker.*
FROM HumanFactors RIGHT JOIN
(Incident LEFT JOIN Worker ON Incident.ID = Worker.IncidentID) ON
(HumanFactors.ID = Worker.HumanFactor2) OR (HumanFactors.ID = Worker.HumanFactor1)
WHERE (((HumanFactors.HumanFactor)="Fatigue"));
这给了我正是我正在寻找的东西,但我无法弄清楚如何在Builder中创建OR实例。当我尝试回到设计视图时,应用程序就吓坏了。
有没有办法通过构建器处理这个问题而不需要更改SQL?我的用户拒绝做任何比拖放更复杂的事情。或者我是否必须在两者之间创建链接表?我的问题是,虽然链接表使查询构建器工作得很好,但我无法将数据重新连接到控件。只有两个组合框,而不是您期望的那个组合的一个组合。感谢。
答案 0 :(得分:1)
您可以在使用查询构建器创建的查询中添加表的多个实例。当您第一次添加表时,其别名将只是表名(例如,[HumanFactors]),当您添加第二次时,其名称将是附加了_1
的表名。您可以通过单击表格然后打开“属性”窗格来更改别名(请参阅下面的屏幕截图)。
在您的情况下,我相信查询看起来像这样:
(要查看更大版本的屏幕截图,请右键单击它并选择“查看图像”。)
答案 1 :(得分:0)
SELECT Incident.*, Worker.*
FROM
HumanFactors HF
LEFT JOIN Worker W ON HF.ID = W.HumanFactor1 OR HF.ID = W.HumanFactor2
LEFT JOIN Incident I ON I.ID = W.IncidentID
答案 2 :(得分:0)
怎么回事:
这将为您提供人为因素疲劳的所有记录。不完全是你的方式,但也可能有用。