【问题标题】:How to remove rows related by name in Oracle如何在Oracle中删除按名称相关的行
【发布时间】:2013-06-19 15:55:55
【问题描述】:

我在一个数据库表中有以下记录

ID   NAME         REF
-----------------------
1    ar.chik       33
4    ar.chik.rt    33
5    dy.i.op       35
9    dy.i

哪条语句可以删除以下记录:

ID   NAME         REF
------------------------
4    ar.chik.rt    33
5    d.yi.op       35

【问题讨论】:

  • 返回这些行而不是其他行的逻辑是什么?
  • 这些行是带前缀(.rt、.op 等)的双行。这些是我需要删除的重复项

标签: sql oracle oracle10g


【解决方案1】:

如果您想删除表中与原始name 相似的行,那么您应该能够使用类似于以下内容的内容:

delete 
from yourtable
where id in (select id
             from
             (
               select id, 
                 row_number() over(partition by ref
                                   order by length(name)) rn
               from yourtable
             ) d
             where rn > 1);

SQL Fiddle with Demo

【讨论】:

    【解决方案2】:

    如果我明白你想要什么,你可以使用这个:

    DELETE FROM Yourtable WHERE name='ar.chik.rt' OR name='d.yi.op' ;
    

    DELETE FROM Yourtable WHERE name IN ('ar.chik.rt','d.yi.op') ;
    

    或者如果您想删除带有多个点的记录:

    DELETE FROM Yourtable WHERE name LIKE '%.%.%' ;
    

    【讨论】:

      【解决方案3】:
      delete from Yourtable 
      where id in(4,5);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-01
        • 2015-04-25
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 2011-07-11
        相关资源
        最近更新 更多