PostgreSQL删除重复的行忽略大小写

时间:2011-10-08 16:09:03

标签: postgresql case-insensitive duplicate-removal

我需要从一个表中删除在指定字段上具有相同值的行,忽略大小写。例如,如果我有一行'foo'作为字段的值,另一行'Foo'作为同一字段的值,我想只删除其中一行(保留1行)。
我尝试过这样的事情:

delete from table t1 
where exists (select 1 
              from table t2 
              where t1.key <> t2.key 
                and t1.field ILIKE t2.field)

但这也会删除另一行 有什么建议吗?

2 个答案:

答案 0 :(得分:3)

只需按<>更改<

DELETE
  FROM table t1 
 WHERE exists (
    SELECT 1 
      FROM table t2 
     WHERE t1.key < t2.key 
       and t1.field ILIKE t2.field
 )

这样您可以保留行key最高的行。您还可以使用>来保留最低key的记录。

答案 1 :(得分:1)

假设key是表格的主键:

DELETE FROM the_table t1
WHERE t1.key not in (select min(t2.key)
                     from the_table t2
                     group by lower(t2.field));