SQL查询删除多行

时间:2013-06-28 13:57:51

标签: mysql sql

我们如何删除db中包含列的多行? 假设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'

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

提前致谢 艾米

5 个答案:

答案 0 :(得分:1)

delete from tableName where LOWER(list_name) = 'owner-aaa'

答案 1 :(得分:1)

DELETE FROM mytable WHERE LOWER(listname) IN
(SELECT LOWER(listname) FROM mytable 
GROUP BY LOWER(listname)
HAVING COUNT(*) > 1)

答案 2 :(得分:0)

DELETE a
FROM list a
INNER JOIN list b ON LOWER(a.list_name)=LOWER(b.list_name)
WHERE a.id <> b.id

答案 3 :(得分:0)

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

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

答案 4 :(得分: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”子句。