Mysql 删除所有值并保留一个
我有一张像这样的桌子:Mysql 删除所有值并保留一个,mysql,database,database-design,Mysql,Database,Database Design,我有一张像这样的桌子: uid | name | user_id -------------------- 1 | aaa | 111 2 | bbb | 111 3 | ccc | 222 4 | aaa | 222 5 | vvv | 333 6 | zzz | 333 7 | aaa | 111 8 | bbb | 111 我想写一个查询,就像它将删除所有名称aaa,但只保留一次aaa 输出如下: uid | name | user_
uid | name | user_id
--------------------
1 | aaa | 111
2 | bbb | 111
3 | ccc | 222
4 | aaa | 222
5 | vvv | 333
6 | zzz | 333
7 | aaa | 111
8 | bbb | 111
我想写一个查询,就像它将删除所有名称aaa
,但只保留一次aaa
输出如下:
uid | name | user_id
--------------------
1 | aaa | 111
2 | bbb | 111
3 | ccc | 222
4 | aaa | 222
5 | vvv | 333
6 | zzz | 333
可以通过查询来实现吗?是的,不过您需要小心处理这个问题
ALTER IGNORE TABLE `table` ADD UNIQUE `name`;
(如果不起作用,请检查文档中的确切语法)
这将使“名称”列变得唯一,并无情地删除所有重复条目。您也可以使用
DISTINCT
select distinct name from my_table
尝试这样的方法会奏效的
如果要保留id值最低的行
DELETE n1 FROM tablename n1, tablename n2 WHERE n1.uid > n2.uid AND n1.name = n2.name
如果要保留id值最高的行
DELETE n1 FROM tablename n1, tablename n2 WHERE n1.uid < n2.uid AND n1.name = n2.name
从tablename n1、tablename n2中删除n1,其中n1.uid
您必须比较name和uid来删除所有重复的值。这不会改变表的内容。不会,但可以将输出重定向到新表。我假设
name
是假定的表名吗?
DELETE a
FROM table tbl
LEFT JOIN
(
SELECT user_id, MIN(uid) min_uid, name
FROM table
GROUP BY user_id, name
) tbl1 ON tbl.user_id = tbl1.user_id AND
tbl.uid = tbl1.min_uid AND
tbl.name = tbl1.name
WHERE tbl1.user_id IS NULL