我们如何删除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'
但它只删除了小写列表,我想要一些通用的东西来检查小和大写的副本并删除它们两个?
提前致谢 艾米
答案 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”子句。