需要将A表的3条数据查询出来插入B表,插入之前需要判断B表是否已经存在该条数据,存在则过滤掉,不存在则插入,需要涉及到判断,遍历等技术点,感谢大家帮忙解答!
你要实现的效果,不需要通过遍历就可以实现,使用批量插入即可。
insert into aaa (code, name)
select code, name
from bbb
left join aaa on aaa.code = bbb.code and aaa.name = bbb.name --左联找出AAA表不存在的数据
where b.code is null
insert into 的时候查一下aaa表不在bbb表中的数据就好了
insert into bbb select * from aaa a where a.name not in (select b.name from bbb b) ;
执行前
按code和name同时过滤
USE [test]
GO
insert into dbo.test_b
select code,name from dbo.test_a where not exists (select 1 from dbo.test_b where test_b.code=test_a.code and test_b.name=test_a.name)
只按code过滤
USE [test]
GO
insert into dbo.test_b
select code,name from dbo.test_a where not exists (select 1 from dbo.test_b where test_b.code=test_a.code)
INSERT INTO B
SELECT CODE
,NAME
FROM A
WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.CODE = B.CODE )
这个用merge into就可以实现吧
代码示例如下 tb1数据插入tb2
insert into tb2
SELECT * from tb1 where code+name not in (SELECT code+name from tb2)
这种情况,只要把表加个唯一约束就OK了,看下面的例子:
IF OBJECT_ID('dbo.testaa') IS NOT NULL
DROP TABLE dbo.testaa
IF OBJECT_ID('dbo.testbb') IS NOT NULL
DROP TABLE dbo.testbb
CREATE TABLE testaa(code VARCHAR(20),name VARCHAR(20))
CREATE TABLE testbb(code VARCHAR(20),name VARCHAR(20))
INSERT testbb
SELECT '1.1','我'
UNION ALL SELECT '1.2','你'
UNION ALL SELECT '1.3','他'
INSERT dbo.testaa
SELECT '1.1','我'
ALTER TABLE testaa ADD CONSTRAINT uiq UNIQUE(code)
WITH (IGNORE_DUP_KEY = ON)
INSERT dbo.testaa
SELECT * FROM dbo.testbb
SELECT * FROM dbo.testaa
pymysql
insert into bbb (code, name)
select
code,
name
from aaa a
where not exists (select 1 from bbb b where b.code=a.code)
可以用union 去重