2016-09-11 2 views
0

항공기 유지 보수 편차를 추적하는 데 3 개의 테이블이 사용되었습니다.MS 액세스 왼쪽 결합이 지원되지 않음 - Combobox as Variable

1 - 편차 - 편차를 설명합니다.

2 - 항공기 - 항공기 편차 - - 나는 보고서를 열하려고 고유 ID, DeviationID 및 AircraftID

과 열, 모든 편차를 보여 함대

3 항공기의 목록 ID로 항공기를 선택하는 양식의 콤보 상자를 사용하여 특정 aircraftID와 비교합니다. 나는 다음과 같은 SQL과 쿼리 정의를 수정하려면 콤보 상자의의 onUpdate 이벤트를 사용하고 있습니다 : 나는 오류를 지원하지 않는 조인 LEFT를 수신하고

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 

. 나는 괄호를 추가하려고 시도했지만 오류가 발생하지는 않지만 특정 항공기 번호가 아닌 모든 것을 테이블에서 볼 수 있습니다. 내가 원하는 aircraftID (예 : 428)에서 하드 코딩하여 진술을 테스트했지만 여전히 "AND t2.AircraftID = 428"강조 표시된 오류가 지원되지 않습니다.

잘못된 가입을 사용하고 있습니까? 이 쿼리를 작성하는 올바른 방법은 무엇입니까?

+0

"WHERE"절을 대신 사용해야합니다. 그래서, "선택 편차, ... t1.ID = t2.DeviationID WHERE td2.aircraftID = 428"에 대한 t2 2. – winghei

답변

1

문제는 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 때문에 필요합니다.

+0

불행히도 여전히 항공기 번호가있는 편차표가 아닌 편차표의 모든 레코드를 검색합니다. – tllewellyn

+0

어둠 속에서 촬영하고 제안을 LEFT 대신 INNER JOIN으로 바꾸면서 작동하도록했습니다. – tllewellyn

+0

"MS Access는 ON 절의 상수를 허용하지 않습니다"- '상수'는 '상수 값'을 의미합니까? 그렇다면 이것은 매우 어색한 진리입니다! – onedaywhen