MySQL将重复数字放在一个字段中

时间:2016-07-13 15:23:39

标签: mysql

之前我做过这次,我想法我是如何完成它的。这是一个更大的过程的一部分,所以为什么不值得一提。

我在表中有一列我需要存储行的重复次数。即。

表目前看起来像这样

content | repeated
-------------------
aaa     | NULL
bob     | NULL
aaa     | NULL

预期输出是让表格看起来像这样

content | repeated
-------------------
aaa     | 2
bob     | 1
aaa     | 2

我可以使用distinct或COUNT(*)来获取这些计数,但我不能为我的生活记住如何让单个查询针对整个表运行并更新所有记录重复字段。

2 个答案:

答案 0 :(得分:2)

以下是查询:

UPDATE
your_table YT
INNER JOIN 
(
  SELECT 
   content,
   COUNT(*) total
  FROM your_table
  GROUP BY content
) AS t
ON YT.content = t.content
SET YT.repeated = t.total;

SQL FIDDLE DEMO 在演示中,您将在更新后看到数据

<强>解释

  • 首先通过内部选择查询获取每个count的{​​{1}} 给它一个别名content
  • 然后在表t的另一个别名之间设置inner joinYT上的t
  • 现在将matching content表的重复字段设置为YT的值。

答案 1 :(得分:1)

您必须使用子查询来确定按内容重复的次数,将其包装到另一个完全没有意义的子查询中,以绕过MySQL从正在修改的表中进行选择的限制,并将此子查询加入到您的更新语句中原表:

update yourtable
inner join
    (select *
     from
         (select content, count(*) as repeat
          from yourtable
          group by content
         ) t1
    ) t2 on yourtable.content=t2.content
set yourtable.repeated=t2.repeat