繁体   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