【问题标题】:MS Access VBA: Syntax error with inner joinMS Access VBA:内部连接的语法错误
【发布时间】:2018-09-01 05:35:13
【问题描述】:

我正在尝试向 MS Access 查询添加一个简单的内部联接。我试图将表与单个字段连接起来,只是为了将结果限制为 cusnums 的子集。我收到一个我完全不理解的语法错误(见下文)。

我在下面包含了旧代码和新代码。唯一的变化是增加了内连接。任何帮助,将不胜感激。谢谢。

错误信息:

查询表达式中的语法错误(缺少运算符)

'(qry_Co_1_PRET_Routed_2_Days_Out.cusnum = tbl_Store_With_Sat_Ord.shpcusnum)
LEFT JOIN 
        qry_Co_1_PRET_Open_Order_2_Days_Out 
ON      
        (qry_Co_1_PRET_Routed_2_Days_Out.co_num = qry_Co_1_PRET_Open_Order_2_Days_Out.co_num) 
    AND 
        (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = qry_Co_1_PRET_Open_Order_2_Days_Out.shpcusnum'

旧代码:

SELECT 
        IIf([totordqty]>0, "Order In","No Order") AS OO_Staus, 
        qry_Co_1_PRET_Routed_2_Days_Out.co_num, 
        qry_Co_1_PRET_Routed_2_Days_Out.prislscod, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusnum, 
        qry_Co_1_PRET_Routed_2_Days_Out.co_nam, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusphn, 
        Switch([totordqty]>0,"",[cusphn]<>"",[cusphn],True,"No Phone # on File") AS Cust_Phone, 
        qry_Co_1_PRET_Routed_2_Days_Out.rtedow, 
        qry_Co_1_PRET_Routed_2_Days_Out.rtecod, 
        qry_Co_1_PRET_Routed_2_Days_Out.stpnum, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.plnshpdat, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.totordqty, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.ordnetwgt, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.ordcub, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.shptotamt, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.prcflg, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusemaadd, 
        qry_Co_1_PRET_Routed_2_Days_Out.TD_Email
FROM 
        qry_Co_1_PRET_Routed_2_Days_Out 
LEFT JOIN 
        qry_Co_1_PRET_Open_Order_2_Days_Out 
ON 
        (qry_Co_1_PRET_Routed_2_Days_Out.co_num = qry_Co_1_PRET_Open_Order_2_Days_Out.co_num) 
    AND 
        (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = qry_Co_1_PRET_Open_Order_2_Days_Out.shpcusnum)
WHERE 
        (((IIf([totordqty]>0,"Order In","No Order"))="No Order"))
ORDER BY 
        IIf([totordqty]>0,"Order In","No Order"), 
        qry_Co_1_PRET_Routed_2_Days_Out.rtecod, 
        qry_Co_1_PRET_Routed_2_Days_Out.stpnum;

新代码:

SELECT 
        IIf([totordqty]>0,"Order In","No Order") AS OO_Staus, 
        qry_Co_1_PRET_Routed_2_Days_Out.co_num, 
        qry_Co_1_PRET_Routed_2_Days_Out.prislscod, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusnum, 
        qry_Co_1_PRET_Routed_2_Days_Out.co_nam, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusphn, 
        Switch([totordqty]>0,"",[cusphn]<>"",[cusphn],True,"No Phone # on File") AS Cust_Phone, 
        qry_Co_1_PRET_Routed_2_Days_Out.rtedow, 
        qry_Co_1_PRET_Routed_2_Days_Out.rtecod, 
        qry_Co_1_PRET_Routed_2_Days_Out.stpnum, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.plnshpdat, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.totordqty, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.ordnetwgt, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.ordcub, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.shptotamt, 
        qry_Co_1_PRET_Open_Order_2_Days_Out.prcflg, 
        qry_Co_1_PRET_Routed_2_Days_Out.cusemaadd, 
        qry_Co_1_PRET_Routed_2_Days_Out.TD_Email
FROM 
        qry_Co_1_PRET_Routed_2_Days_Out 
INNER JOIN
        tbl_Store_With_Sat_Ord
ON
        (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = tbl_Store_With_Sat_Ord.shpcusnum)
LEFT JOIN 
        qry_Co_1_PRET_Open_Order_2_Days_Out 
ON      
        (qry_Co_1_PRET_Routed_2_Days_Out.co_num = qry_Co_1_PRET_Open_Order_2_Days_Out.co_num) 
    AND 
        (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = qry_Co_1_PRET_Open_Order_2_Days_Out.shpcusnum)
WHERE 
        (((IIf([totordqty]>0,"Order In","No Order"))="No Order"))
ORDER BY 
        IIf([totordqty]>0,"Order In","No Order"), 
        qry_Co_1_PRET_Routed_2_Days_Out.rtecod, 
        qry_Co_1_PRET_Routed_2_Days_Out.stpnum;

【问题讨论】:

标签: sql ms-access vba ms-access-2016


【解决方案1】:

将 SQL 代码前面的 FROM 部分更改为:

FROM 
(
            qry_Co_1_PRET_Routed_2_Days_Out 
    LEFT JOIN 
            qry_Co_1_PRET_Open_Order_2_Days_Out 
    ON      
            (qry_Co_1_PRET_Routed_2_Days_Out.co_num = qry_Co_1_PRET_Open_Order_2_Days_Out.co_num) 
        AND 
            (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = qry_Co_1_PRET_Open_Order_2_Days_Out.shpcusnum)
)
INNER JOIN
        tbl_Store_With_Sat_Ord
ON
        (qry_Co_1_PRET_Routed_2_Days_Out.cusnum = tbl_Store_With_Sat_Ord.shpcusnum)
WHERE 
        [totordqty] <= 0
ORDER BY 
        [totordqty] <= 0, 
        qry_Co_1_PRET_Routed_2_Days_Out.rtecod, 
        qry_Co_1_PRET_Routed_2_Days_Out.stpnum;

注意WHEREORDER BY 子句的更改。

【讨论】:

  • 这回答了我的问题,谢谢。但是请注意:更改 WHERE 和 ORDER BY 子句会导致它不返回任何记录。我把它改回原来的,现在我得到了正确的结果。
  • @joshusmu 这很奇怪,因为逻辑显然是相同的。我只能假设可能有空值,因此WHERE 子句可能需要为[totordqty] &lt;= 0 OR [totordqty] IS NULL。只是猜测,没有看到数据。
猜你喜欢
  • 2013-05-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多