这个sql语句出了什么问题?

时间:2010-06-08 18:50:20

标签: sql ms-access vba

在访问中我这样做:

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 个答案:

答案 0 :(得分:14)

这是错误的:

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

您只能在子查询中为IN子句选择一列。你想要这样的东西:

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

您需要检查表tableimport中列的确切名称。以上只是我最好的猜测。

答案 1 :(得分:3)

您可能需要从tableimport而不是*。

中选择代理商代码

答案 2 :(得分:2)

您应该在tableimport内部选择

上指定您要搜索的列

此外,您可以声明要插入的表的字段和返回的字段:

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

答案 3 :(得分:2)

这部分可能误导了你:

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

执行需要“操作”查询(INSERT,DELETE,UPDATE或SELECT INTO)。当您给执行一个普通(行返回)SELECT查询时,您将始终收到错误#3065,“无法执行选择查询”。这并不意味着您的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显示时明确列出字段。

答案 4 :(得分:-2)

这有效:

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