0

我们如何从数据库中删除具有列的多行?假设 db 有以下数据(id、list_name、user)并且 list_name 的值为:

 Owner-aaa
 coowner-aaa
 owner-aaa
 subowner-aaa

我们如何删除具有重复的“Owner-aaa”和“owner-aaa”的行?

我们可以在此查询中添加一些内容吗:

delete from <table_name> where list_name = 'owner-aaa'

但它只删除小写列表,我想要一些通用的东西来检查小写和大写的重复并删除它们?

提前感谢艾米

4

5 回答 5

1
delete from tableName where LOWER(list_name) = 'owner-aaa'
于 2013-06-28T13:59:26.557 回答
1
DELETE FROM mytable WHERE LOWER(listname) IN
(SELECT LOWER(listname) FROM mytable 
GROUP BY LOWER(listname)
HAVING COUNT(*) > 1)
于 2013-06-28T14:00:57.797 回答
0
DELETE a
FROM list a
INNER JOIN list b ON LOWER(a.list_name)=LOWER(b.list_name)
WHERE a.id <> b.id
于 2013-06-28T14:00:06.483 回答
0

Meaby 你可以使用 LOWER/UPPER sql 函数。

但是你确定你的模型是正确的吗?有这样的名单似乎很奇怪。那应该是另一个带有 ID 和 NAME 字段的表 NAMES。这是一个1-N关系。

于 2013-06-28T14:11:22.120 回答
0

从您的问题中,我不能完全确定您是要删除所有出现重复的行,还是留下一个,只删除真正的重复。所以这里是每个镜头:

要仅删除真正的重复项:

DELETE FROM MyTable WHERE id IN
(
   SELECT T1.id 
     FROM MyTable T1
          INNER JOIN MyTable T2
             ON UPPER(T1.list_name) = UPPER(T2.list_name)
            AND T2.id <> T1.id
            AND (T1.id <> (SELECT MAX(id) FROM MyTable WHERE UPPER(list_name) = UPPER(T1.list_name))
) DUPS

这假定 id 字段对于每条记录都是唯一的

要删除所有重复的记录,请删除子查询中的两个“AND”子句。

于 2013-06-28T14:15:02.073 回答