我正在尝试将数据插入Oracle数据库中的表中。数据已经存在,但不是所有数据,我不能只删除数据并重新插入数据。有没有办法将数据插入表中(不知道我缺少什么数据)。我的脚本正在运行,但实际上没有插入任何数据(我确实知道数据丢失了。我故意将数据用于测试其重新插入。)
Insert into item (item, descr)
select distinct a.SUBORD, a.SUBORD_DESCR FROM EXIDE.UDT_BOM a, item b
where b.item = a.subord and not exists
(select b.item from item b, exide.udt_bom a where a.subord = b.ITEM)
答案 0 :(得分:2)
如果我按照您正在进行的操作,您可以使用merge
statement:
merge into item i
using (select subord, subord_descr from exide.udt_bom) u
on (i.item = u.subord)
when not matched then insert (item, descr) values (u.subord, u.subord_descr);
这样做的另一个好处是,如果udt_bom
有现有项目的新描述,您也可以更新item
表中的内容:
merge into item i
using (select subord, subord_descr from exide.udt_bom) u
on (i.item = u.subord)
when matched then update set descr = u.subord_descr
when not matched then insert (item, descr) values (u.subord, u.subord_descr);
答案 1 :(得分:1)
您对太多表的引用太多了。使用not exists
子句,查询不需要显式连接:
Insert into item(item, descr)
select distinct b.SUBORD, b.SUBORD_DESCR
FROM EXIDE.UDT_BOM b
where not exists (select i.item from item i where b.subord = i.ITEM);
如果没有重复项,在udt_bom
中,我也会删除distinct
。并且,当您使用表缩写作为别名时,查询更具可读性,而不是像a
,b
等无意义的字母。