Oracle

在 Oracle 中將 INSERT 或 REPLACE INTO + SELECT 作為源

  • May 18, 2016

我有兩張桌子A和B。

我想將 B 的內容插入到表 A 中。問題是 B 中有一行已經存在於 A 中。

我已經搜尋過,我找到了一些關於 MERGE 的答案,但是沒有人說如何將它與 SELECT 作為源一起使用。

總之,我想用這個語句

INSERT INTO A (data1, data2, dataX)
SELECT B.data1, 'String', B.data2, B.data3
FROM B;

但避免現有行。

謝謝!

表 1:A(數據 1、數據 2、數據 3)

表 2:B(數據 1、數據 2、數據 3)

假設:兩個表的第一個欄位名都是主鍵

MERGE INTO A TA USING (SELECT * FROM B) TB ON (TA.DATA1 = TB.DATA1) WHEN NOT MATCHED THEN INSERT (TA.DATA1, TA.DATA2, TA.DATA3) VALUES (TB.DATA1, TB.DATA2, TB.DATA3);

在這種情況下,您不必使用MERGE. 假設data1列可以用來檢查記錄是否存在,下面應該做的工作:

INSERT INTO A (data1, data2, dataX)
SELECT B.data1,  B.data2, B.data3
FROM B b WHERE NOT EXISTS 
(
   SELECT NULL FROM A a WHERE a.data1=b.data1
);

引用自:https://dba.stackexchange.com/questions/138814