sql - 删除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
当第二个文件中存在相同的记录时,我想从第一个文件中删除记录。
解决方案
为了呈现结果,可以使用 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
推荐阅读
- r - 左列元素与 R 中的右列元素“完全连接”
- c# - 检测到不支持的可能对象循环。这可能是由于循环或物体深度
- sql - 如何在 PostgreSQL 中使用 where 子句创建视图
- wordpress - docker-compose wordpress:最新的不同默认端口
- docker - 如何解决“apt-get install docker-ce”上的“Hash Sum Mismatch”?
- excel - 如何在每一行上重做这个宏命令(例如从第 2 行到第 500 行)
- android - 我的 android 应用程序可以以编程方式结束通话吗?
- python - Django按两类逻辑过滤
- node.js - 打字稿导入错误
- reactjs - dotnet core 3.1 反应项目上的 ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY