在SQL中,左连接会导致Access 2010中的运行时错误
我很感激你能给我的任何帮助。我正在尝试使用SQL查询作为表单的记录源在SQL中,左连接会导致Access 2010中的运行时错误,sql,join,ms-access-2010,Sql,Join,Ms Access 2010,我很感激你能给我的任何帮助。我正在尝试使用SQL查询作为表单的记录源 strSQL = "SELECT " & DocID & " AS DocID,'" & DocumentType & "' AS DocumentType," & "B.Description AS [Decision Point], B.QCDecisionPointID,C.QCNote FROM ((QC.QCAttributeDecisionPointAsc A INNER
strSQL = "SELECT " & DocID & " AS DocID,'" & DocumentType & "' AS DocumentType," & "B.Description AS [Decision Point], B.QCDecisionPointID,C.QCNote FROM ((QC.QCAttributeDecisionPointAsc A INNER JOIN QC.QCDecisionPoint B ON A.QCDecisionPointID = B.QCDecisionPointID) LEFT OUTER JOIN QC.QCResultDecisionPoint C ON C.QCDecisionPointID=B.QCDecisionPointID AND C.QCAssignmentID=" & AssignmentID & " ) WHERE QCAttributeID= " & AttributeID & ";"
但我得到的运行时错误如下:
如果我删除sql字符串中的偏旁词,那么:“查询表达式中的语法错误(mising运算符)”
如果查询中有偏执,则在Access中会出现以下错误:
“不支持联接表达式”
我想是左边和中间的连接。我需要像这样的查询来获得正确的结果,请告诉我如何使用子查询来实现这一点。调试时看到的sql字符串如下所示:
SELECT 7674754 AS DocID,'All Supporting Documents' AS DocumentType,
B.Description AS [Decision Point], B.QCDecisionPointID,C.QCNote
FROM QC.QCAttributeDecisionPointAsc A
INNER JOIN QC.QCDecisionPoint B ON A.QCDecisionPointID = B.QCDecisionPointID
LEFT OUTER JOIN QC.QCResultDecisionPoint C ON C.QCDecisionPointID=B.QCDecisionPointID
AND C.QCAssignmentID=53 WHERE A.QCAttributeID= 3;
感谢您提供的任何帮助。尝试将
和C.qcsassignmentid=53移动到WHERE子句中:
SELECT 7674754 AS DocID,'All Supporting Documents' AS DocumentType,
B.Description AS [Decision Point], B.QCDecisionPointID,C.QCNote
FROM QC.QCAttributeDecisionPointAsc A
INNER JOIN QC.QCDecisionPoint B ON A.QCDecisionPointID = B.QCDecisionPointID
LEFT OUTER JOIN QC.QCResultDecisionPoint C ON C.QCDecisionPointID=B.QCDecisionPointID
WHERE A.QCAttributeID= 3 AND (C.QCAssignmentID=53 OR C.QCAssignmentID IS NULL)
由于它是一个左连接,您需要指定您希望从C获得一个特定的值或不需要任何值(这就是为什么或C.QCAssignmentID为NULL
是否存在)请按照HansUp的建议将表名放在方括号中,并删除条件部分中的圆括号。试试这个:
SELECT 7674754 AS DocID
, 'All Supporting Documents' AS DocumentType
, B.Description AS [Decision Point]
, B.QCDecisionPointID
, C.QCNote
FROM [QC.QCAttributeDecisionPointAsc] A
INNER JOIN [QC.QCDecisionPoint] B
ON A.QCDecisionPointID = B.QCDecisionPointID
LEFT JOIN [QC.QCResultDecisionPoint] C
ON C.QCDecisionPointID = B.QCDecisionPointID
AND C.QCAssignmentID = 53
WHERE A.QCAttributeID = 3;
这是正确的,您不能在显示的联接中使用AND。你会在Where语句中得到你需要的答案吗?还要注意,当连接不止一个时,Access需要在连接周围加括号
SELECT 7674754 AS DocID
, 'All Supporting Documents' AS DocumentType
, B.Description AS [Decision Point]
, B.QCDecisionPointID
, C.QCNote
FROM ( [QC.QCAttributeDecisionPointAsc] A
INNER JOIN [QC.QCDecisionPoint] B
ON A.QCDecisionPointID = B.QCDecisionPointID )
LEFT JOIN (SELECT * FROM [QC.QCResultDecisionPoint]
WHERE QCAssignmentID = 53) As C
ON C.QCDecisionPointID = B.QCDecisionPointID
WHERE A.QCAttributeID = 3
谢谢你的回复。我希望我能发布一些图片来解释我的数据库结构和查询结果。但是,将其放在where子句中只会导致6条记录中的5条出现,因为其中一个类别附带了一个注释,用于AssignmentID=34。非常感谢大家的帮助。我认为是我的数据库结构出了问题…检索简单数据的查询不应该这么难处理。我遇到了以下错误:查询表达式中的语法错误(missin goperator)。where子句可以是子查询的一部分。