虽然两年前问过这个问题,但解决方案并没有使用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是表中三列的串联。
答案 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)
删除所有不唯一的行