我有 2 個表 soft_group(100M 資料)和 soft(120M 資料)。這些表的欄位幾乎相同,我需要在 soft_group 表中添加 2 個欄位 call_status、call_status_code 并用 soft 表中的資料填充它們。我添加了兩個欄位,但無法正確加載,由于某種原因資料重復并且超過2.4億(應該不超過1億)。
我的腳本:
INSERT /* append enable_parallel_dml parallel(16)*/
INTO SOFT_GROUP(CALL_STATUS,CALL_STATUS_CODE)
SELECT -- parallel(16)
rs.call_status AS call_status,
rs.call_status_code AS call_status_code
FROM SOFT s
WHERE s.call_id = call_id
AND s.start_time = start_time
AND s.phonenumber = phonenumber;
我也嘗試過更新,但這需要很多時間:
UPDATE SOFT_GROUP t1
SET (call_status, call_status_code) = (SELECT t2.call_status, t2.call_status_code
FROM SOFT t2
WHERE t1.call_id = t2.call_id
AND t1.start_time = t2.start_time
AND t1.client_id = t2.client_id)
WHERE EXISTS (
SELECT 1
FROM OFT t2
WHERE t1.call_id IN t2.call_id
AND t1.start_time = t2.start_time
AND t1.client_id = t2.client_id );
uj5u.com熱心網友回復:
我寧愿說您需要更新當前資料,而不是插入新行。如果是這樣,請使用merge.
不清楚您發布的代碼中哪一列屬于哪個表,所以我猜到了;我希望我能做到這一點。如果沒有,您應該知道如何唯一匹配行以及哪個值進入哪個列。
merge into soft_group a
using soft b
on (a.call_id = b.call_id
and a.start_time = b.start_time
and a.phonenumber = b.phonenumber
)
when matched then update set
a.call_status = b.call_status,
a.call_status_code = b.call_status_code;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488347.html
