【问题标题】:MS Access Insert where not existsMS Access 在不存在的地方插入
【发布时间】:2019-02-17 23:11:42
【问题描述】:

我有下表:

+-----------+--------+
| FirstName | Active |
+-----------+--------+
| Rob       | TRUE   |
| Jason     | TRUE   |
| Mike      | FALSE  |
+-----------+--------+

仅当 John 的条目不存在时,我才想插入“John”(Active=True)where Active=True. 我尝试以下操作:

insert into testTable (FirstName, Active) values ('John',True) where not exists (select 1 from testTable where FirstName='John' and Active=True)

但我明白了 '查询输入必须至少包含一个表或查询'。

任何人都可以帮助我实现目标吗?

【问题讨论】:

  • 对于表格的格式,我很抱歉。我仍然不确定如何将表格粘贴到此处(那里的任何帮助也将不胜感激..)

标签: ms-access insert conditional where exists


【解决方案1】:

您不能将ValuesWHERE 子句结合使用。您需要改用INSERT INTO ... SELECT

由于您不想从表中插入值,因此您需要使用虚拟表。我为此使用MSysObjects(这是一个始终存在且始终包含行的系统表):

INSERT INTO testTable (FirstName, Active) 
SELECT 'John', True
FROM (SELECT First(ID) From MSysObjects) dummy
WHERE NOT EXISTS (select 1 from testTable where FirstName='John' and Active=True)

【讨论】:

  • 谢谢,如果我直接在 Access 中执行,这可以工作,但考虑到我通过 VB 脚本生成输入查询并从那里使用 and ("ADODB.Connection") (Provider=Microsoft .ACE.OLEDB.12.0),我收到一条“无法读取记录; 'MSysObjects' 没有读取权限。还有其他想法吗?非常感谢
  • 好吧,如果您确定始终包含记录,请使用 testTable 而不是 MSysObjects 作为您的虚拟表,或者创建您自己的虚拟表。
【解决方案2】:

在我的情况下,该字段已存在于表中,因此我将其从 INSERT 更改为 UPDATE 查询并且它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多