我有3张表用于跟踪飞机维修的偏差。
1 - 偏差 - 描述偏差。
2 - 飞机 - 机队中的飞机清单
3 - 飞机偏差 - 具有唯一ID,DeviationID和AircraftID的列
我正在尝试打开报告,显示针对特定飞机ID的所有偏差,使用表格上的组合框按ID选择飞机。我正在使用组合框的onUpdate事件来使用以下SQL修改查询定义:
strSQL = "SELECT Deviation, Rev, Title, Issued, ExpiryDate, ExpiryHours, " _
& "ExpOther, Active FROM Deviations t1 LEFT JOIN " _
& "AircraftDeviations t2 ON t1.ID = t2.DeviationID " _
& "AND t2.AircraftID = " & Me!cmbAircraft
我收到LEFT JOIN不支持错误。我试过添加括号,它没有错误,但我看到表中的所有内容,而不仅仅是那些特定的飞机号码。我已经通过我想要的飞行器ID中的硬编码测试了声明(例如:428),但我仍然得到了" AND t2.AircraftID = 428"突出显示。
我在这里使用了错误的加入吗?编写此查询的正确方法是什么?
答案 0 :(得分:1)
问题是MS Access不允许ON
子句中的常量。唉。这只是Access的Access版本中许多尴尬的限制之一。
您可以使用子查询执行所需的操作:
SELECT Deviation, Rev, Title, Issued, ExpiryDate, ExpiryHours,
ExpOther, Active
FROM Deviations as d LEFT JOIN
(SELECT ad.*
FROM AircraftDeviations as ad
WHERE ad.AircraftID = Me!cmbAircraft
) as ad
ON d.ID = ad.DeviationID ;
编辑:
如果你想要一个内连接,那么代码就更简单了:
SELECT Deviation, Rev, Title, Issued, ExpiryDate, ExpiryHours,
ExpOther, Active
FROM Deviations as d INNER JOIN
AircraftDeviations as ad
ON d.ID = ad.DeviationID
WHERE ad.AircraftID = Me!cmbAircraft;
仅需要子查询,因为LEFT JOIN
。