![](/img/trans.png)
[英]How do i limit in sql, that if one table row is selected, only corresponding items from another table show?
[英]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.