2017-12-04 78 views
0

SQL Server Management Studio에서 작동하는 쿼리를 MS Access로 전송하는 데 문제가 있습니다.다중 조인 (MS Access)이 포함 된 중첩 선택 문

Syntax error in JOIN operation

이 오류가 발생하면 'FROM ProductRun'행이 강조 표시됩니다.

Access에서 여러 Join 문을 처리 할 때 대괄호가 필요하다고 생각합니다. 나는 붙어있다. 도와주세요.

SELECT 
    LoadTable.DateTimeStamp, ProgramTable.Value 1, PL.Value 2, PL.Value 3 
FROM 
    ((LoadTable 
LEFT JOIN 
    ProgramTable ON LoadTable.DateTimeStamp = ProgramTable.DateTimeStamp) 
LEFT JOIN 
    PL ON LoadTable.DateTimeStamp = PL.DateTimeStamp) 
LEFT JOIN 
    (SELECT [StartTime], [EndTime] 
    FROM ProductRun 
    WHERE ProductRun.StartTime >= '11/1/2017' 
     AND ProductRun.Startime <= '12/1/2017') ON (LoadTable.DateTimeStamp >= DATEADD(MINUTE, 15, ProductRun.StartTime) 
               AND LoadTable.DateTimeStamp <= DATEADD(MINUTE, -15, ProductRun.EndTime)) 
ORDER BY 
    LoadTable.DateTimeStamp; 

이 잘 작동 Management Studio의 내 중첩 된 select 문입니다 :

LEFT JOIN (SELECT [StartTime] 
     ,[EndTime] 
FROM [ProductionReporting].[dbo].ProductRun 
WHERE StartTime between '11/1/2017 12:00:00 AM' and '11/25/2017 12:00:00 AM') as M3 
ON M1.DateTimeStamp between DATEADD(MINUTE,15, M3.StartTime) and DATEADD(MINUTE,-15, M3.EndTime) 
+0

나는 MS 액세스가 'ON에서 불평등을 할 수 있습니다 생각하지 않는다 조항. –

+0

Management Studio에서 중첩 된 쿼리를 포함하도록 원래의 게시물을 편집했습니다. 논리 테스트가 ON 절에서 허용되지 않으면 Access에서이 작업을 수행하는 방법은 무엇입니까? – MTdoe

+0

@GordonLinoff 액세스는 그들을 허용합니다 (여러 쿼리에서 사용했습니다). 나는 Kashif가 정확하게 오류를 발견했다고 생각하는데, 'DateAdd'의 첫 번째 인수는 문자열이어야하고,'MINUTE'는 유효한 인수가 아닙니다 (Access는 아마 그 인수가 하나가되어서는 안되는 곳의 매개 변수라고 생각합니다). 또한'ON' 절의 다중 비교 = 액세스가 필요한 괄호 –

답변

1

이 시도 :

SELECT loadtable.datetimestamp, 
     programtable.value AS 1, 
     pl.value   AS 2, 
     pl.value   AS 3 
FROM ((loadtable 
     LEFT JOIN programtable 
       ON loadtable.datetimestamp = programtable.datetimestamp) 
     LEFT JOIN pl 
       ON loadtable.datetimestamp = pl.datetimestamp) 
     LEFT JOIN (SELECT starttime, 
         endtime 
        FROM productrun 
        WHERE productrun.starttime >=#11/1/2017# 
         AND productrun.starttime <=#12/1/2017#) a 
       ON loadtable.datetimestamp >= Dateadd("n", 15, a.starttime) 
       AND loadtable.datetimestamp <= Dateadd("n", -15, a.endtime) 
ORDER BY loadtable.datetimestamp; 
+0

이 답변은 거의 정확합니다. 'ON' 절에서 다중 비교를 수행 할 때 액세스에는 괄호 세트가 필요합니다.'ON (loadtable.datetimestamp> = Dateadd "n", 15, a.starttime) AND loadtable.datetimestamp <= Dateadd ("n", -15, a.endtime))' –