删除mysql group_concat选中的行

时间:2016-07-06 15:21:13

标签: mysql

虽然两年前问过这个问题,但解决方案并没有使用group_concat。所以保持简短给出一个表

id    name
1     Tim
2     Sam
3     Bob
4     Joe
5     Ali
6     Kay
7     Bob
8     Joe

运行以下

select name, count(*) c, group_concat(id) rows
  from table
 group by name
having c > 1;

给出

name   c   rows
Bob    2   3,7
Joe    2   4,8

是否可以从我的表中删除行3,7,4和8而无需编写脚本?我想我确实需要使用group_concat,因为实际上我的" name" column是表中三列的串联。

2 个答案:

答案 0 :(得分:1)

SELECT count(`access`.id) as 
extra_access,`access`.perm_role_id,group_concat(temp.extra_id) as extra_ids
FROM `access`  
INNER JOIN(  
SELECT `access`.id,perm_role_id,perm_module_id,group_concat(id) as extra_id
FROM `access`
GROUP BY perm_role_id,perm_module_id     
HAVING COUNT(id) =1  
)temp ON access.id= temp.id GROUP BY perm_role_id

再次使用加入并再次连接此

答案 1 :(得分:0)

如果要删除重复的行,请尝试使用

DELETE from table where id NOT IN (select id from table GROUP BY name having count(*) = 1)

删除所有不唯一的行