Access SQL语法错误:缺少运算符
我正在尝试将T-SQL查询转换为MS Access SQL,并得到一个语法错误,我正在努力查找。我的MS Access SQL查询如下所示:Access SQL语法错误:缺少运算符,sql,ms-access,syntax-error,Sql,Ms Access,Syntax Error,我正在尝试将T-SQL查询转换为MS Access SQL,并得到一个语法错误,我正在努力查找。我的MS Access SQL查询如下所示: INSERT INTO IndvRFM_PreSort (CustNum, IndvID, IndvRScore, IndRecency, IndvFreq, IndvMonVal ) SELECT IndvMast.CustNum, IndvMast.IndvID, IndvMast.IndvRScore, I
INSERT INTO IndvRFM_PreSort (CustNum, IndvID, IndvRScore, IndRecency, IndvFreq, IndvMonVal )
SELECT
IndvMast.CustNum, IndvMast.IndvID, IndvMast.IndvRScore,
IndvMast.IndRecency, IndvMast.IndvFreq, IndvMast.IndvMonVal
FROM
IndvMast
INNER JOIN
OHdrMast ON IndvMast.IndvID = OHdrMast.IndvID
INNER JOIN
MyParameterSettings on 1=1].ProdClass
INNER JOIN
[SalesTerritoryFilter_Check all that apply] ON IndvMast.SalesTerr = [SalesTerritoryFilter_Check all that apply].SalesTerr
WHERE
(((OHdrMast.OrdDate) >= [MyParameterSettings].[RFM_StartDate]))
GROUP BY
IndvMast.CustNum, IndvMast.IndvID, IndvMast.IndvRScore,
IndvMast.IndRecency, IndvMast.IndvFreq, IndvMast.IndvMonVal,
[CustTypeFilter_Check all that apply].IncludeInRFM,
[ProductClassFilter_Check all that apply].IncludeInRFM,
[SourceCodeFilter_Check all that apply].IncludeInRFM,
IndvMast.FlgDontUse
我已经回顾了MS Access SQL和T-SQL在和其他几个位置之间的差异,但运气不好
感谢所有的帮助
更新:我删除了许多行,试图找到语法错误,但在运行时仍然会遇到相同的错误(使用T-SQL运行良好):
我想您的查询中有一些错误,第一个错误(更重要) 为什么要使用
HAVING
子句来添加这些条件
HAVING (((IndvMast.IndRecency)>(date()-7200))
AND (([CustTypeFilter_Check all that apply].IncludeInRFM)=1)
AND (([ProductClassFilter_Check all that apply].IncludeInRFM)=1)
AND (([SourceCodeFilter_Check all that apply].IncludeInRFM)=1)
AND ((IndvMast.FlgDontUse) Is Null))
HAVING
通常用于聚合函数(COUNT、SUM、MAX、MIN、AVG)的条件,对于标量值,必须放入WHERE
子句
第二个:HAVING子句中有12个括号打开,11个括号关闭。我想您的查询中有一些错误,第一个(更重要) 为什么要使用
HAVING
子句来添加这些条件
HAVING (((IndvMast.IndRecency)>(date()-7200))
AND (([CustTypeFilter_Check all that apply].IncludeInRFM)=1)
AND (([ProductClassFilter_Check all that apply].IncludeInRFM)=1)
AND (([SourceCodeFilter_Check all that apply].IncludeInRFM)=1)
AND ((IndvMast.FlgDontUse) Is Null))
HAVING
通常用于聚合函数(COUNT、SUM、MAX、MIN、AVG)的条件,对于标量值,必须放入WHERE
子句
第二个:HAVING子句中打开了12个括号,关闭了11个括号。查询中有许多项在任何符合SQL的数据库中都应该失败:
groupby
中的表中有字段,而在from
或JOIN
子句中没有引用SELECT
query中的字段数与INSERT-INTO
子句中的字段数不匹配联接
WHERE
子句中必须使用类似于ON 1=1
的表达式,对于MyParameterSettings显示的交叉联接表,请使用逗号分隔的表INSERT INTO IndvRFM_PreSort (CustNum, IndvID, IndvRScore, IndRecency, IndvFreq, IndvMonVal)
SELECT
i.CustNum, i.IndvID, i.IndvRScore, i.IndRecency, i.IndvFreq, i.IndvMonVal
FROM
[MyParameterSettings] p, (IndvMast i
INNER JOIN
OHdrMast o ON i.IndvID = o.IndvID)
INNER JOIN
[SalesTerritoryFilter_Check all that apply] s ON i.SalesTerr = s.SalesTerr
WHERE
(o.OrdDate >= p.[RFM_StartDate])
GROUP BY
i.CustNum, i.IndvID, i.IndvRScore, i.IndRecency, i.IndvFreq, i.IndvMonVal
在较小的SQL子集中,最后一个表不需要ON 1=1
条件,并且在SQL Server中可能也是冗余的。如果您打算进行交叉联接,只需一个逗号分隔的表就足够了。在上述示例中也会执行相同的操作:
SELECT
IndvMast.CustNum, IndvMast.IndvID, IndvMast.IndvRScore,
IndvMast.IndRecency, IndvMast.IndvFreq, IndvMast.IndvMonVal
FROM
[My Parameter Settings], IndvMast
INNER JOIN
OHdrMast ON IndvMast.IndvID = OHdrMast.IndvID
查询中有许多项在任何符合SQL的数据库中也应失败:
groupby
中的表中有字段,而在from
或JOIN
子句中没有引用SELECT
query中的字段数与INSERT-INTO
子句中的字段数不匹配联接
WHERE
子句中必须使用类似于ON 1=1
的表达式,对于MyParameterSettings显示的交叉联接表,请使用逗号分隔的表INSERT INTO IndvRFM_PreSort (CustNum, IndvID, IndvRScore, IndRecency, IndvFreq, IndvMonVal)
SELECT
i.CustNum, i.IndvID, i.IndvRScore, i.IndRecency, i.IndvFreq, i.IndvMonVal
FROM
[MyParameterSettings] p, (IndvMast i
INNER JOIN
OHdrMast o ON i.IndvID = o.IndvID)
INNER JOIN
[SalesTerritoryFilter_Check all that apply] s ON i.SalesTerr = s.SalesTerr
WHERE
(o.OrdDate >= p.[RFM_StartDate])
GROUP BY
i.CustNum, i.IndvID, i.IndvRScore, i.IndRecency, i.IndvFreq, i.IndvMonVal
在较小的SQL子集中,最后一个表不需要ON 1=1
条件,并且在SQL Server中可能也是冗余的。如果您打算进行交叉联接,只需一个逗号分隔的表就足够了。在上述示例中也会执行相同的操作:
SELECT
IndvMast.CustNum, IndvMast.IndvID, IndvMast.IndvRScore,
IndvMast.IndRecency, IndvMast.IndvFreq, IndvMast.IndvMonVal
FROM
[My Parameter Settings], IndvMast
INNER JOIN
OHdrMast ON IndvMast.IndvID = OHdrMast.IndvID
请在
HAVING
语句中填写错误是否缺少最后一个括号?@MarkC。还有一个额外的右括号,很好的捕捉。@peggy请重新发布您的查询。1=1apply]
怎么了?@peggy您在1=1.ProdClass上还有MyParameterSettings。请发布错误您在HAVING
语句中缺少最后一个括号了吗?@MarkC。还有一个额外的右括号,很好的捕捉。@peggy请重新发布您的查询。1=1apply]
怎么了?@peggy您在1=1.ProdClass上还有MyParameterSettings。查询在sql中使用having子句可以正常工作。添加了一个右括号,但在查询表达式'IndvMast.IndvID=OHdrMast.IndvID....中仍然出现语法错误(缺少运算符)[SalesTerritoryFilter\u检查所有适用项].SalesTer'
查询在sql中使用having子句可以正常工作。添加了一个右括号,但在查询表达式'IndvMast.IndvID=OHdrMast.IndvID....中仍然出现语法错误(缺少运算符)[SalesTerritoryFilter\u检查所有适用项].SalesTer'