0

我正在尝试将数据插入 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)
4

2 回答 2

2

如果我遵循您正在做的事情,您可以使用以下merge语句

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);

SQL 小提琴演示

这还有一个好处是,如果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);

另一个小提琴

于 2013-09-18T16:17:51.430 回答
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我也会去掉distincta而且,当您使用表缩写作为别名而不是无意义的字母(如、等)时,查询更具可读性b

于 2013-09-18T16:17:42.887 回答