【问题标题】:Nested select statement w/ multiple joins (MS Access)带有多个连接的嵌套选择语句 (MS Access)
【发布时间】:2017-12-04 19:22:20
【问题描述】:

我在将在 SQL Server Management Studio 中工作的查询传输到 MS Access 时遇到问题。我收到一个错误:

JOIN 操作中的语法错误

当我收到此错误时,“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 中的嵌套选择语句,效果很好:

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)

【问题讨论】:

  • 我认为 MS Access 不允许在 ON 子句中出现不等式。
  • 我编辑了我的原始帖子以在 Management Studio 中包含嵌套查询,它工作正常。如果在 ON 子句中不允许进行逻辑测试,我将如何在 Access 中进行这项工作?
  • @GordonLinoff Access 确实允许它们(我在多个查询中使用过它们)。我认为 Kashif 正确地发现了错误,DateAdd 的第一个参数应该是一个字符串,MINUTE 不是一个有效的参数(Access 可能认为这是一个不应该有的地方的参数)。此外,ON 子句中的多重比较 = Access 中需要括号

标签: sql ms-access select join nested


【解决方案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; 

【讨论】:

  • 这个答案几乎是正确的,在ON 子句中进行多重比较时,Access 确实需要一组括号:ON (loadtable.datetimestamp &gt;= Dateadd("n", 15, a.starttime) AND loadtable.datetimestamp &lt;= Dateadd("n", -15, a.endtime))
猜你喜欢
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多