Левое соединение VBA не может комбинировать объект. (код ошибки: 0x80040e21) - PullRequest
0 голосов
/ 06 апреля 2020

Я путаю запрос SQL через соединение VBA ADODB. Пожалуйста, помогите выяснить, что мне не хватает в запросе ...

У меня есть две таблицы, 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) ' , в Memo, OLE или объекте гиперссылки

((a. [A_ID] = RIGHT (b. [B_ID], 8)) И (ВЛЕВО (ЗАМЕНА (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]))"

Я что-то пропустил в запросе?

1 Ответ

0 голосов
/ 06 апреля 2020

Попробуйте

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] ) "
...