我们是否可以在SQL查询中使用EXIST从表中搜索和删除记录(&A)? [英] Can we use exist in a SQL query to search & delete the records from a table?
本文介绍了我们是否可以在SQL查询中使用EXIST从表中搜索和删除记录(&A)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是一个雪花表,它没有分区机制,而是有微分区。我们有了在桌面上执行不同类型的满载的新要求。
场景:我有一个表,它有三列:ID、Name、Current_Location Records on Day1:
Se Name Current_Location Rate
1 A L1 100
2 B L2 200
3 C L3 300
4 D L4 400
5 E L5 500
6 F L6 600
7 G L7 700
8 H L7 800
我的要求是每天以不同的费率为每个CURRENT_LOCATION获取新数据,如DAY 2:
Se Name Current_Location Rate
6 P L6 6000
7 G L7 7000
8 H L7 1100
9 Z L7 1200
根据列CURRENT_LOCATION中的值,我必须首先删除以前的记录,然后加载新记录。例如,在上面的场景中使用CURRENT_LOCATION L7,在第一天有两条L7记录,但是在第二天,我得到了三条记录。所以我必须删除
7 G L7 700
8 H L7 800
,然后将第2天的所有三条新记录加载到我的表中。L6也是如此。DELETE和LOAD之后的最终表应该如下所示:
Se Name Current_Location Rate
1 A L1 100
2 B L2 200
3 C L3 300
4 D L4 400
5 E L5 500
6 P L6 6000
7 G L7 7000
8 H L7 1100
9 Z L7 1200
为此,我实现了:
select *
from maintable
where exists (select 1
from stagingtable
where maintable.keycolumn = stagingtable.keycolumn)
该查询将生成我需要的数据。
delete from maintable
where exists select 1
from stagingtable
where maintable.keycolumn = stagingtable.keycolumn
我将其转换为delete
查询,以便可以使用该查询删除记录,然后运行
insert into maintable (select * from stagingtable)
有没有比使用
更好的方法delete from maintable
where exists select 1
from stagingtable
where maintable.keycolumn = stagingtable.keycolumn
有没有人可以告诉我,如果查询可以提高查询性能,我如何调整/调整查询? 如有任何帮助,我们将不胜感激。
推荐答案
您可以使用merge
merge into maintable using (
select keycolumn, v
from stagingtable
) as b on maintable.keycolumn = b.keycolumn
when matched then update set maintable.v = b.v
when not matched then insert (keycolumn, v) values (b.keycolumn, b.v);
这篇关于我们是否可以在SQL查询中使用EXIST从表中搜索和删除记录(&A)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文