2017-12-04 14 views
0

SQL Server Management Studioで動作するクエリをMS Accessに転送する際に問題が発生します。複数の結合(MS Access)でネストされたSELECTステートメント

Syntax error in JOIN operation

このエラーが発生した場合、 'FROM ProductRun'という行が強調表示されています。

私がやった複数のJoin文を扱うときは、Accessに角括弧が必要だと思います。私は立ち往生している。助けてください。

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 Accessのは、 'ONに不平等が可能とは思いません'句。 –

+0

元の投稿を編集して管理スタジオにネストされたクエリを追加しました。 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)) ' –

関連する問題