[英]Oracle Code to insert data into table that doesn't exist
我正在嘗試將數據插入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)
如果我遵循您的操作,則可以使用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);
另一個小提琴 。
您對太多表的引用過多。 使用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
等無意義的字母時,查詢更易讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.