【发布时间】:2014-05-26 09:47:40
【问题描述】:
我正在尝试使 SQL 查询正常工作(在 Access 2007 中),但我反复收到关于语法错误的一般错误消息,它只是说明(没有拼写错误 - 它似乎截断了 SQL):
Syntax error in query expression 'Metric.ID = Metric_Value_Measurement.Metric_ID AND (SELECT Measurement_Date FROM Metric_Value_Measurement WHERE Metric_ID = '1') = Metric_Value_Measurement.Measurement_Dat'.
我尝试使用的 SQL 如下 - 我检查了嵌套的 SELECT 查询是否在此查询之外工作,如果我从 INNER JOIN 中删除 AND 部分,其余的查询按预期工作。
谁能建议我的语法可能错在哪里?
SELECT Desired_Future_State_Metric.Desired_Future_State_ID
,Desired_Future_State_Metric.Metric_ID
,Desired_Future_State_Metric.Target_Value
,Desired_Future_State_Metric.Target_Date
,Metric.Description
,Metric.Unit
,Metric_Value_Measurement.Measurement_Date
FROM (
(
Metric INNER JOIN Desired_Future_State_Metric
ON Metric.ID = Desired_Future_State_Metric.Metric_ID
) INNER JOIN Metric_Unitvalue ON Metric.ID = Metric_Unitvalue.Metric_ID
)
INNER JOIN Metric_Value_Measurement ON (
Metric.ID = Metric_Value_Measurement.Metric_ID
AND (
SELECT MAX(Measurement_Date)
FROM Metric_Value_Measurement
WHERE Metric_ID = Metric.ID
) = Metric_Value_Measurement.Measurement_Date
)
GROUP BY Desired_Future_State_Metric.Desired_Future_State_ID
,Desired_Future_State_Metric.Metric_ID
,Desired_Future_State_Metric.Target_Value
,Desired_Future_State_Metric.Target_Date
,Metric.Description
,Metric.Unit
,Metric_Value_Measurement.Measurement_Date;
编辑:感谢下面的大卫华莱士,问题似乎是我将单个值 Metric_Value_Measurement.Measurement_Date 与多个值进行比较;这是在此处添加我的代码时的疏忽,因为 SELECT 语句应该读取 SELECT MAX(Measurement_Date) 以获取给定记录的最近日期。修改后,我仍然收到语法错误(与以前相同的错误)。为了加入这些表格,我还需要做些什么吗?
编辑2:由于到目前为止似乎没有一个答案解决了这个问题,我认为发布相关表格的结构可能会很有用:
Metric
----------
ID
Description
Desired_Future_State_Metric
----------
ID
Metric_ID
Desired_Future_State_ID
Target_Value
Target_Date
Metric_Value_Measurement
----------
ID
Metric_ID
Measurement_Date
Measurement_Value
目标是为给定的Metric_ID 获取最新的Measurement_Value - 因为下面的代码似乎不起作用,我愿意就如何获得它提出建议。总之,当列表按日期降序排序时,我正在寻找的值是给定 Metric_ID 的第一个 Measurement_Value。
【问题讨论】:
-
我已经添加了表格的结构,希望有人可以提供帮助。
标签: sql ms-access ms-access-2007