что не так с этим SQL-оператором?


В access я делаю это:

insert into accounts_changes 
 (select * 
  from accounts 
  where [Agency Code] 
  in (select * from tableimport))

Он говорит, что ему не нравится это заявление INSERT

Обновление:

sSql = "insert into accounts_changes (select * from Accounts where [Agency Code] in (select [Agency Code] from tableimport))"

Я сделал то, что сказал Марк, и это все еще дает мне то же самое сообщение об ошибке

syntax error in INSERT INTO statement

Когда я делаю это:

ssql = "select [Agency Code] from tableimport"
CurrentDb.Execute ssql

Он говорит, что не может выполнить SELECT QUERY

5 3

5 ответов:

Эта часть, возможно, ввела вас в заблуждение:

ssql = "select [AgencyCode] from tableimport"
CurrentDb.Execute ssql

для выполнения требуется запрос" action " (INSERT, DELETE, UPDATE или SELECT INTO). Когда вы даете Execute простой (возвращающий строку) запрос SELECT, вы всегда будете получать ошибку #3065, "не удается выполнить запрос select". Это не значит, что с вашим утверждением SELECT было что-то не так. Проверьте инструкцию SELECT, вставив ее в представление SQL нового запроса.

Вы показали две вариации [AgencyCode]... один с и еще один без зазора между агентством и кодом. Что это такое?

Я думаю, что в вашем первоначальном заявлении INSERT была дополнительная пара скобок, которые не нужны. Попробуйте сделать это следующим образом:

insert into accounts_changes
select * 
from Accounts
where [Agency Code] in (
    select [Agency Code] from tableimport)

Если это все еще не удается, убедитесь, что у вас есть одинаковое количество полей, с одинаковыми именами полей и типами данных как в Accounts, так и в accounts_changes. Если поля в двух таблицах не совпадают точно, перечислите поля явно, как показал вам @pcent.

Это неправильно:

select *
from accounts
where [Agency Code] in (select * from tableimport)

В подзапросе можно выбрать только один столбец для предложения IN. Вы хотите что-то вроде этого:

select *
from accounts
where [Agency Code] in (select [Agency Code] from tableimport)

Необходимо проверить точное название столбца в таблице tableimport. Все вышесказанное - лишь мое лучшее предположение.

Вам, вероятно, нужно выбрать код агентства из tableimport вместо *.

Вы должны указать столбец, который вы хотите найти в tableimport inner select.

Также можно объявить поля вставляемой таблицы и возвращаемые поля:

INSERT INTO TABLE_EXAMPLE (A, B) SELECT AA, BB FROM TABLE_ORIGIN

Это сработало:

insert into accounts_changes select * from Accounts where [Agency Code] in (select [Agency Code] from tableimport)