簡體   English   中英

Oracle Code將不存在的數據插入表中

[英]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 並且,當您使用表縮寫作為別名而不是諸如ab等無意義的字母時,查詢更易讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM