首页 > 解决方案 > 删除sql表中的重复记录

问题描述

我有一个场景,我将带有 file_id 8018 的第一个文件加载到阶段表中,然后将带有 file_id 8019 的第二个文件加载到阶段表中。

我们在第一个文件中得到的记录可能相同。

在我发布的结果集中,我们可以看到 (2,3,4) 记录中的 id,file_id 为 8018 在第二个文件中,file_id 为 8019

id  estimatename    market  spotlength  bcastweek   goaldollars file_id
2   3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-08  15499.75    8018
3   3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-15  15499.75    8018
4   3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-22  15499.75    8018
5   3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-24  32453.44    8018
58  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-08  15499.75    8019
59  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-15  15499.75    8019
60  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-22  15499.75    8019
62  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-05  15499.75    8019
63  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-12  15499.75    8019
64  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-19  15499.75    8019

我希望我的结果集是

id  estimatename    market  spotlength  bcastweek   goaldollars file_id
5   3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-24  32453.44    8018
58  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-08  15499.75    8019
59  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-15  15499.75    8019
60  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-07-22  15499.75    8019
62  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-05  15499.75    8019
63  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-12  15499.75    8019
64  3Q19 CALIFORNIA LOS ANGELES, CA :60 2019-08-19  15499.75    8019

当第二个文件中存在相同的记录时,我想从第一个文件中删除记录。

标签: sqlsql-server

解决方案


为了呈现结果,可以使用 CTE:

表:

Create Table #tbl1
(
id Int,
estimatename VarChar(10),
market VarChar(30),
spotlength VarChar(3),
bcastweek Date,
goaldollars Decimal(12,2),
[file_id] Int
)
Insert Into #tbl1 Values
(2,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-08',15499.75,8018),
(3,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-15',15499.75,8018),
(4,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-22',15499.75,8018),
(5,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-24',32453.44,8018),
(58,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-08',15499.75,8019),
(59,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-15',15499.75,8019),
(60,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-22',15499.75,8019),
(62,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-08-05',15499.75,8019),
(63,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-08-12',15499.75,8019),
(64,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-08-19',15499.75,8019)

Create Table #tbl2
(
id Int,
estimatename VarChar(10),
market VarChar(30),
spotlength VarChar(3),
bcastweek Date,
goaldollars Decimal(12,2),
[file_id] Int
)
Insert Into #tbl2 Values
(2,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-08',15499.75,8018),
(3,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-15',15499.75,8018),
(4,'3Q19','CALIFORNIA LOS ANGELES, CA',':60','2019-07-22',15499.75,8018)

热电偶:

With cte As
(
Select 
       t1.*,
       t2.id As t2_id
From 
       #tbl1 t1 Left Join 
       #tbl2 t2 On t1.id = t2.id
Where 
       t2.id Is Null
)
Select * From cte

要从表 1 中执行删除:

Delete From #tbl1
From 
       #tbl1 t1 Left Join 
       #tbl2 t2 On t1.id = t2.id
Where 
       t2.id Is Not Null

Select * from #tbl1

推荐阅读