簡體   English   中英

如何在sql中僅將新行從一個表添加到另一表

[英]How to add only new row from one table to another table in sql

我在連接到hana數據庫的SQL Server中使用鏈接服務器。 我想從hana數據庫中導入一張表並將其復制到sql中。 我已經完成了導入部分。 現在的問題是,我想進行查詢,以選擇唯一的行或在不存在或不存在的sql中僅插入行。 但是我的查詢給出了主鍵沖突錯誤,這意味着它再次插入了所有數據。 這是我的查詢:

insert into OACT ( AcctCode,AcctName,CurrTotal,FatherNum,SysTotal,CreateDate,UpdateDate,ActId,FormatCode)
select tab2.AcctCode,tab2.AcctName,tab2.CurrTotal, tab2.FatherNum,tab2.SysTotal,tab2.CreateDate,tab2.UpdateDate,tab2.ActId,tab2.FormatCode
from HanaSql8.."TRAININGDB"."OACT" tab2
Where NOT EXISTS (
    Select tab1.AcctCode,tab1.AcctName,tab1.CurrTotal, tab1.FatherNum,tab1.SysTotal,tab1.CreateDate,tab1.UpdateDate,tab1.ActId,tab1.FormatCode
    from OACT  tab1
    where tab1.AcctCode=tab2.AcctCode
);

如果目標表上的主鍵在AcctCode列上定義,您的代碼應該可以正常工作

在EXISTS()或NOT EXISTS()中,您不必使用列名進行選擇,它只是一種邏輯檢查,因此您可以進行如下修改

insert into OACT ( 
    AcctCode,AcctName,CurrTotal,
    FatherNum,SysTotal,CreateDate
    ,UpdateDate,ActId,FormatCode
    )
select 
    tab2.AcctCode,tab2.AcctName,tab2.CurrTotal, 
    tab2.FatherNum,tab2.SysTotal,tab2.CreateDate,
    tab2.UpdateDate,tab2.ActId,tab2.FormatCode
from HanaSql8.."TRAININGDB"."OACT" tab2
Where NOT EXISTS (
    Select *
    from OACT  tab1
    where tab1.AcctCode=tab2.AcctCode
);

我們可以測試LEFT JOIN子句作為NOT EXISTS()的替代方法

這是查詢

insert into OACT ( 
    AcctCode,AcctName
)
select 
    tab2.AcctCode,tab2.AcctName
from HanaSql8.."TRAININGDB"."OACT" tab2
left join OACT tab1
    on tab1.AcctCode=tab2.AcctCode
where tab1.AcctCode is null

暫無
暫無

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

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