我有3个表用于跟踪飞机维修偏差。
1 -偏差-描述偏差的位置。
2 -飞机-机队中飞机的列表
3 -飞机偏差-具有唯一ID、DeviationID和AircraftID的列
我正试图打开一个报告,显示针对特定aircraftID的所有偏差,使用表单上的组合框按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不支持的错误。我试过添加括号,没有错误,但我在表中看到了所有东西,而不仅仅是那些特定的飞机编号。我已经通过在我想要的aircraftID(例如:428)中硬编码测试了该语句,但我仍然得到了"AND t2"不支持的连接错误。AircraftID = 428"高亮显示。
我在这里使用错误的连接吗?写这个查询的正确方法是什么?
问题是MS Access不允许在ON
子句中使用常量。唉。这只是Access版本SQL中许多令人尴尬的限制之一。
你可以对子查询做任何你想做的事:
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
。