我有一个sql命令,它返回一个重复项目列表(在我的MySQL数据库中),只有两列,一列用于重复值,另一列用于重复记录计数。
SELECT title, COUNT(*) c FROM posts GROUP BY title HAVING c > 1
title c
---------------
title_1 2
title_a 2
title_b 2
我假设一个结果如下:(并且它是一个数组数组)
objId title
------------
1 title_1
2 title_1
所以我的目标是将一个字符串附加到重复记录数组中的结果的第二项,如下所示:
objId title
------------
1 title_1
2 title_1_2
我找到了更新记录的解决方案,但我不知道如何循环查看第一个sql命令后得到的结果,以便我无法使用它在实践中。
UPDATE posts SET title = CONCAT(IFNULL(title,''), ' 2');
在伪代码中,我会做类似的事情来为标题创建新的字符串:
result[1].title = (oldTitleString," 2");
save result[1];
我是sql的新手,并且不太了解可能性,也许会有更简单的方法,所以如果有人能告诉我怎样才能得到第二个,我真的很感激从重复项记录并用另一个字符串扩展它。
答案 0 :(得分:1)
我的解决方案:
SELECT `objId`,`title`,
(SELECT CONCAT(`title`, '_', `po`.`objId`)
FROM `posts` `p`
WHERE `title` = `po`.`title` && `p`.`objId` < `po`.`objId` LIMIT 1) AS `title_custom`
FROM `posts` `po`
答案 1 :(得分:0)
以下是样本小提琴:
http://sqlfiddle.com/#!9/a4164/8
查询如下所示:
select id, title,
concat(title,'_',
(select count(*) from posts p2 where p2.title = p1.title and p2.id <= p1.id)),
title,
count(*) c
from posts p1
group by title
having c > 1