繁体   English   中英

Oracle-删除有条件的记录

[英]Oracle - Delete records with conditions

我想写一些基于一些条件删除记录的SQL。

我有四个记录 记录的图像

在这些记录中,ID是唯一的并且可以更改。 名称用于删除记录。

1)名称应至少具有一种OK类型。

2)如果“名称”的ID名称中不包含DUMMY,则删除ID包含DUMMY的所有其他记录。

如何在SQL中执行此操作?

尝试这个:

delete from tablename t
where t."id" like '%DUMMY%'
and t."name" = (
  select "name" from tablename
  where "name" = '?'
  group by "name"
  having sum(case when "type" = 'OK' then 1 else 0 end) > 0
  and sum(case when "id" not like '%DUMMY%' then 1 else 0 end) > 0
)

IN子句之后的子查询返回name s, name至少具有1 type = 'OK'和至少1个不包含'DUMMY' id
编辑:

delete from tablename t
where
  t."name" = '?' 
  and (
    (t."id" like '%DUMMY%' and t."type" <> 'OK')
    or (
      t."type" = 'OK' 
      and exists (
        select 1 from tablename
        where "name" = t."name" and "type" = t."type" and "id" > t."id"
      )
    )
  )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM