我们是否可以在SQL查询中使用EXIST从表中搜索和删除记录(&A)? [英] Can we use exist in a SQL query to search & delete the records from a table?

查看:16
本文介绍了我们是否可以在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆