查询输入必须包含至少一个表或查询
Posted
技术标签:
【中文标题】查询输入必须包含至少一个表或查询【英文标题】:Query input must contain atleast one table or query 【发布时间】:2013-05-24 11:40:35 【问题描述】:我在访问中有一个查询,假设在插入之前检查该项目是否已存在于数据库中:
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')
现在,我之前遇到过这个错误,但通常是在没有表的情况下,例如,如果您“从测试表中选择 *”并输入“选择 *”并省略 from 子句,您会得到相同的错误。但我有一张桌子?也许我的 where not exists 语法是错误的?
编辑:
好的,我已按照建议添加了一个“双”表,并粘贴了此问题的代码副本:Table-less UNION query in MS Access (Jet/ACE)
尝试添加如图所示的约束给了我这个错误:
按确定后,它会突出显示“检查”一词
我从来没有真正处理过约束(至少在访问中..)我的语法可能是错误的
编辑 2:
使用 ctrl G 命令添加约束
当我按下回车键时...
使用 ADO 添加约束:
当我按下运行时...
【问题讨论】:
你不应该在'values'和括号之间加一个空格吗?不确定是否需要,但值得一试... @JustinKirk 您必须从 ADO 执行ALTER TABLE
。使用CurrentProject.Connection.Execute
我没有使用 ADO,我使用的是 oledb xD ,有没有在访问权限内执行此操作的方法?
如果您不想使用我的 CreateDualTable
过程,您可以通过打开即时窗口 (Ctrl+g) 在 Access 中使用 ADO 执行该语句,将下一条评论中的文本粘贴为一行,然后按回车执行它。
CurrentProject.Connection.Execute "ALTER TABLE Dual ADD CONSTRAINT there_can_be_only_one CHECK ((SELECT Count(*) FROM Dual) = 1);"
【参考方案1】:
这是Dual
表可能有用的情况之一。 Dual
表是一个单行表,当您真的需要源表但 SQL 解析器坚持存在时,可以在查询的 FROM 子句中使用它。
一些数据库系统(例如,Oracle)提供Dual
虚拟表作为“标准设备”,但在 Access 中我们需要创建自己的。有关该过程的精彩描述,请查看 HansUp 的回答 here。
所以,一旦你的 [Dual] 表就位,即
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
【讨论】:
您确定查询正确吗?选择“0000846043-...” from dual 将始终返回 false,因为 dual 中没有记录.. 不会吗? @JustinKirk 不,Dual
表中应该始终只有 一个 记录。
@JustinKirk Gord 提到的 Dual table 包含一个检查约束,可确保 table 始终只包含一行。【参考方案2】:
试试这个你可以使用简单的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');
【讨论】:
FinalizedPrintedStickers 这个表是否存在/ 删除表中重复条目所需的子句。? 请检查NOT IN子句 它只是用某种语言查询或查询。VB,C#? 取自C#代码,但我在实际访问中测试查询以上是关于查询输入必须包含至少一个表或查询的主要内容,如果未能解决你的问题,请参考以下文章
“查询输入必须至少包含一个表或查询”添加“INSERT INTO”语句时出错