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

时间:2013-05-24 11:40:35

标签: 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')

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

enter image description here

修改

好的,我已根据建议添加了一个表格“Dual”,并在此问题中粘贴了代码副本:Table-less UNION query in MS Access (Jet/ACE)

尝试添加如图所示的约束给了我这个错误: enter image description here

按下确定后突出显示“检查”一词

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

编辑2:

使用ctrl G命令

添加约束

enter image description here

当我按下回车...

enter image description here

使用ADO添加约束:

enter image description here

当我按下跑步时......

enter image description here

2 个答案:

答案 0 :(得分:7)

这是Dual表可能有用的情况之一。 Dual表是一个单行表,当你不真正需要一个源表时,可以在查询的FROM子句中使用它,但SQL解析器坚持要有一个

某些数据库系统(例如Oracle)提供Dual虚拟表作为“标准设备”,但在Access中我们需要创建自己的虚拟表。有关该过程的优秀描述,请查看HansUp的回答here

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

id
--
 1

...然后你可以使用这个查询执行你的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

答案 1 :(得分:0)

试试这个你可以使用简单的where子句

INSERT INTO FinalizedPrintedStickers
    Values('0000846043-481-9-0',
    '48IG - 1F Straight Panel                                                        ',
    '481                               ',
    '0',
    '0',
    '',
    '210',
    'Printed')
     WHERE SN Not In(SELECT [SN] FROM FinalizedPrintedStickers Where SN = '0000846043-481-9-0');