1

我很感激你能给我的任何帮助。我正在尝试使用 SQL 查询作为表单的记录源。

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 字符串中的括号,那么:“查询表达式中的语法错误(缺少运算符)”

如果我在查询中有括号,那么我会在 Access 中收到此错误:“不支持连接表达式”

我认为这是 LEFT JOIN 中的 AND。我需要这样的查询才能获得正确的结果,请告诉我如何使用子查询来做到这一点。我调试时看到的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;

谢谢你能给我的任何帮助。

4

3 回答 3

0

尝试AND C.QCAssignmentID=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)

因为它是一个 LEFT JOIN,你需要指定你想要一个来自 C 的特定值或什么都没有(这就是为什么OR C.QCAssignmentID IS NULL存在)

于 2013-01-23T19:00:24.717 回答
0

这是正确的,您不能在显示的连接中使用 AND。您会在 Where 语句中使用 And 获得所需的答案吗?另请注意,当存在多个联接时,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
于 2013-01-23T20:17:51.510 回答
0

请按照 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;
于 2013-01-23T19:26:47.677 回答