首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle代码将数据插入到不存在的表中

Oracle代码将数据插入到不存在的表中
EN

Stack Overflow用户
提问于 2013-09-18 15:31:33
回答 2查看 972关注 0票数 0

我正在尝试将数据插入Oracle数据库中的表中。数据已经存在,但不是所有的数据,我不能只删除数据并重新插入所有数据。是否有方法将数据插入到表中(而不知道丢失了哪些数据)。我的脚本正在运行,但实际上没有数据插入(而且我确实知道有数据丢失。我故意取出数据来测试它的重新插入。)

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-18 16:17:51

如果我跟踪您正在做的事情,您可以使用语句进行如下操作:

代码语言:javascript
复制
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表中的描述:

代码语言:javascript
复制
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);

又一把小提琴

票数 2
EN

Stack Overflow用户

发布于 2013-09-18 16:17:42

对表的引用太多了。使用not exists子句,查询不需要显式联接:

代码语言:javascript
复制
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。而且,使用表缩写作为别名,而不是使用ab等无意义的字母时,查询更易读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18876471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档