这是我的情况。首先,我不在关系数据库上工作,我只是将访问作为一种简单的方式来处理数据。目前,我有很多桌子。 一个主表,我们称其为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,就可以了。
但是我什至很难做一些“简单”的事情,就像将几个表中的数据合并到一个表中一样。
这是我在此期间使用的替代解决方案:
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次…), 但是,它确实有效…
现在,如果有人可以一口气做到这一点…