之前我做过这次,我零想法我是如何完成它的。这是一个更大的过程的一部分,所以为什么不值得一提。
我在表中有一列我需要存储行的重复次数。即。
表目前看起来像这样
content | repeated
-------------------
aaa | NULL
bob | NULL
aaa | NULL
预期输出是让表格看起来像这样
content | repeated
-------------------
aaa | 2
bob | 1
aaa | 2
我可以使用distinct或COUNT(*)来获取这些计数,但我不能为我的生活记住如何让单个查询针对整个表运行并更新所有记录重复字段。
答案 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 join
和YT
上的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