一尘不染

ACCESS / SQL:如何同时插入INTO / UPDATE?

sql

这是我的情况。首先,我不在关系数据库上工作,我只是将访问作为一种简单的方式来处理数据。目前,我有很多桌子。
一个主表,我们称其为MAIN,另外约10个表,我们可以称其为X1,X2,X3等。X1表包含具有X1属性的项目。X2表包含具有X2属性的项目,依此类推。

所有Xx表都具有相同的字段。MAIN表也具有相同的字段,此外还有布尔值X1,X2等。

我想做的事:

我想用来自Xx表的数据来提供MAIN表。
事实是,可能存在具有多个属性的项目,因此它们可以出现在例如X1,X2,X5中。

因此,我首先尝试运行此命令:

UPDATE MAIN
SET itemnumber = X1.itemnumber, x1 = "true";

但它没有任何作用。现在,我认为这只是合乎逻辑的,因为MAIN表中还没有任何记录。

无论如何,我可以写什么样的查询来做到这一点:
如果表X1的记录在MAIN中尚不存在,请将其添加并将X1字段设置为true。
如果MAIN中已经存在X1的记录,请对其进行更新并将X1字段设置为true。

(然后,我将对其进行更新以在我拥有的每个X表上运行。)

我正在考虑INSERT INTO,但是我不想覆盖已经存在的数据或产生错误(我对这一切都不了解很多。

预先感谢任何可以提供提示的人。

编辑1
我以为我会首先尝试将Xx表中的所有数据插入到MAIN表中(它们具有相同的结构)

所以我首先尝试了这个:

INSERT INTO MAIN.itemnumber
(select X1.itemnumber from X1
UNION ALL
select X2.itemnumber from X2)

在一个字段上尝试了一下,看看它是否有效,但是没有:/

我确定一旦添加了X表中的所有数据,然后为每个Xx表运行了带有WHERE EXISTS的UPDATE,并将相应的Xx属性设置为true,就可以了。

但是我什至很难做一些“简单”的事情,就像将几个表中的数据合并到一个表中一样。


阅读 221

收藏
2021-03-08

共1个答案

一尘不染

这是我在此期间使用的替代解决方案:

INSERT INTO MAIN
SELECT X1.itemnumber AS itemnumber
FROM X1
WHERE not exists (select itemnumber
from MAIN
where MAIN.itemnumber = X1.itemnumber);

对每个Xx表重复此操作。照顾重复。

然后,添加属性:

UPDATE MAIN SET X1 = true
WHERE exists (select *
from X1
where X1.itemnumber = MAIN.itemnumber);

对每个Xx表重复此操作。

可能不是最有效的方法(实际上必须编辑查询24次…),
但是,它确实有效…

现在,如果有人可以一口气做到这一点…

2021-03-08