更新存在的地方删除行没有的地方

时间:2017-04-21 13:48:11

标签: sql postgresql delete-row

我可以更新,我可以删除很好,但我想一次做两个。

我有一个像这样的表ORIG,列名是

ref,fname,lname,add1,add2,add3,add4

A1  a  b  c  d  h  j
S2  f  d  s  e  y  t
B3  j  f  s  e  o  p

第一列是唯一的

然后是另一个表格这样的

ref,fname,lname,add1,add2

A1  b  c  d  e
B3  k  g  h  t

我想使用第二个表更新第一个表并删除任何不具备唯一性的行

所以最终结果必须是下面的表ORIG

A1  b  c  d  e  h  j
B3  k  g  h  t  o  p

我能一次完成吗?

2 个答案:

答案 0 :(得分:2)

我可能会使用CTE来解决这个问题:

with u as (
      update orig
          set b = d.b, . . .
          from data d
          where d.a = orig.a
      returning *
     )
delete from orig
    where not exists (select 1 from u where u.a = d.a);

第一个CTE更新行。第二个是删除。

答案 1 :(得分:0)

您可以使用相关的子查询:

delete
from orig o
where not exists (
        select 1
        from data d
        where d.col1 = o.col1
        )