查询输入必须包含至少一个表或查询

6 ms-access

我在访问中有一个查询,假设在插入之前检查该项是否已存在于数据库中:

INSERT INTO FinalizedPrintedStickers
Values('0000846043-481-9-0',
'48IG - 1F Straight Panel                                                        ',
'481                               ',
'0',
'0',
'',
'210',
'Printed')
 WHERE NOT EXISTS(SELECT [SN] FROM FinalizedPrintedStickers Where SN = '0000846043-481-9-0')
Run Code Online (Sandbox Code Playgroud)

现在,我之前遇到过这个错误,但通常是在没有表的情况下,例如,如果你"从测试表中选择*"并输入"Select*"并省略from子句,则会得到相同的错误.但我有一张桌子?也许我的哪里不存在语法错了?

在此输入图像描述

编辑:

好的,我已经添加了一个表"Dual",建议使用从此问题粘贴的代码副本:MS Access(Jet/ACE)中的无表UNION查询

尝试添加如图所示的约束给了我这个错误: 在此输入图像描述

按下确定后突出显示"检查"

我从来没有真正处理过约束(在访问至少...)我的语法可能是错误的

编辑2:

使用ctrl G命令添加约束

在此输入图像描述

当我按下回车...

在此输入图像描述

使用ADO添加约束:

在此输入图像描述

当我按下跑...

在此输入图像描述

Gor*_*son 7

这是Dual表格有用的情况之一.一个Dual表是可以用在单行表从查询的WHERE子句,你并不真的需要一个源表,但SQL解析器坚持那里是一个.

一些数据库系统(例如,Oracle)提供Dual虚拟表作为"标准设备",但在Access中我们需要创建自己的.对于过程的一个极好的说明检查HansUp的答案在这里.

所以,一旦你的[双]表就位,即

id
--
 1
Run Code Online (Sandbox Code Playgroud)

...然后你可以使用这个查询执行你的INSERT(或不...):

INSERT INTO FinalizedPrintedStickers
    (
        SN,
        Field2
    )
    SELECT 
        "0000846043-481-9-0" AS SN,
        "48IG - 1F Straight Panel" AS Field2
    FROM Dual
    WHERE DCount("SN","FinalizedPrintedStickers","SN=""0000846043-481-9-0""")=0
Run Code Online (Sandbox Code Playgroud)