我需要从一个表中删除在指定字段上具有相同值的行,忽略大小写。例如,如果我有一行'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)
但这也会删除另一行 有什么建议吗?
答案 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));