用其他字段的COUNT更新列是SQL?
嗨,大家好我有以下表格设置:
Articles:
ID | TITLE | CONTENT | USER | NUM_COMMENTS
COMMENTS
ID | ARTICLE_ID | TEXT
我需要一个sql语句来更新文章表的NUM_Comments字段,并根据对这篇文章所做的评论数量进行更新,例如:
update articles a, comments f
set a.num_comments = COUNT(f.`id`)
where f.article_id = a.id
上面的SQL不起作用,我得到一个无效的使用fo组功能错误。 我在这里使用MySQL。
您不能在更新声明中加入连接。 它应该是
update articles
set num_comments =
(select count (*) from comments
where comments.article_id = articles.id)
这将更新整个文章表,这可能不是你想要的。 如果您打算只更新一篇文章,那么在子查询之后添加一个'where'子句。
这应该工作。
UPDATE articles a SET num_comments =
(SELECT COUNT(*) FROM comments c WHERE c.article_id = a.id)
但是,在发表评论时,我宁愿只更新一条记录:
UPDATE articles a SET num_comments =
(SELECT COUNT(*) FROM comments c WHERE c.article_id = 100) WHERE a.id = 100
要单独根据列数进行更新,您可以执行如下操作:
update articles, (select count (*) from comments where comments.article_id = articles.id) as newtotals set articles.num_comments = newtotals.count;
或者......如果您遇到需要滚动计数的情况:
update articles, (select (count (*)) + (articles.num_comments) as count from comments join articles on comments.article_id = articles.id group by articles.id) as newtotals set articles.num_comments = newtotals.count;