【问题标题】:VBA left join cannot combine object. (error code: 0x80040e21)VBA 左连接不能合并对象。 (错误代码:0x80040e21)
【发布时间】:2020-04-06 07:31:03
【问题描述】:

我对通过 VBA ADODB 连接的 SQL 查询感到困惑。请帮助找出我在查询中遗漏的内容...

我有两个表,TABLE_A 和 TABLE_B,它们都有 ID 和 CODE 列包含如下数据:

A_ID contains data like, 'abcdefgh';
B_ID contains data like, 'ijabcdefgh';
A_CODE contains data like 'klmstuij' or 'kl-mstuij';
B_CODE contains data like 'klmstu'.

然后我有一个这样的查询,

strSQL = "SELECT * " & _ 
"FROM TABLE_A a " & _ 
"LEFT JOIN TABLE_B b ON ((a.[A_ID]=RIGHT(b.[B_ID],8)) AND (LEFT(REPLACE(a.[A_CODE],'-',''),6)=b.[B_CODE]))"

执行此查询时出现错误,提示:

运行时错误'-2147217887(80040e21)',在备忘录、OLE 或超链接对象中

((a.[A_ID]=RIGHT(b.[B_ID],8)) AND (LEFT(REPLACE(a.[A_CODE],'-',''),6)=b.[B_CODE] )) 不能合并。

我已经尝试在 LEFT JOIN 中使用一个条件进行查询,它可以正常工作,查询如下:

strSQL = "SELECT * " & _ 
"FROM TABLE_A a " & _ 
"LEFT JOIN TABLE_B b ON (a.[A_ID]=RIGHT(b.[B_ID],8))"

然后我尝试在没有字符串事务的 LEFT JOIN 中再添加一个条件,但失败并出现同样的错误:

strSQL = "SELECT * " & _ 
"FROM TABLE_A a " & _ 
"LEFT JOIN TABLE_B b ON ((a.[A_ID]=RIGHT(b.[B_ID],8)) AND (a.[A_CODE]=b.[B_CODE]))"

我是否遗漏了查询中的任何内容?

【问题讨论】:

    标签: sql vba left-join


    【解决方案1】:

    试试

    strSQL = "SELECT * " & _
    "FROM TABLE_A as a " & _
    "LEFT JOIN TABLE_B as b ON inStr(a.[A_ID], b.[B_ID]) or inStr( b.[B_ID], a.[A_ID] ) "
    

    【讨论】:

    • 我在a.[A_CODE]中添加了处理字符串的前置程序,以避免在LEFT JOIN中添加另一个判断。但是我了解到我可以使用 INSTR 作为判断,感谢您的建议。
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多