首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有IN和子查询的MYSQL UPDATE

带有IN和子查询的MYSQL UPDATE
EN

Stack Overflow用户
提问于 2010-06-08 04:58:38
回答 5查看 74.1K关注 0票数 13

嗨,我有这样的表格:

表条目:

id | total_comments

_____________________

1|0

2|0

3|0

4|0

表备注:

id | eid |备注

_____________________

1|1|评论sdfd

2|1|测试测试

3|1|评论文本

4|2|伪评论

5|2|示例注释

6|1| fg fgh dfh

Query我写道:

代码语言:javascript
复制
UPDATE entry 
   SET total_comments = total_comments + 1 
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

我得到的结果是:

表条目:

id | total_comments

_____________________

1|1

2|1

3|0

4|0

预期结果:

表条目:

id | total_comments

_____________________

1|4

2|2

3|0

4|0

任何帮助都将不胜感激。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-08 05:04:43

使用:

代码语言:javascript
复制
UPDATE entry 
   SET total_comments = (SELECT COUNT(*)
                           FROM COMMENTS c
                          WHERE c.eid = id
                       GROUP BY c.eid)
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))
票数 20
EN

Stack Overflow用户

发布于 2010-06-08 05:04:00

如果你真的需要在一个单独的表中使用total_comments,我会把它变成一个视图。

代码语言:javascript
复制
CREATE VIEW entry AS 
  SELECT id, COUNT(comments) AS total_comment 
  FROM comments 
  GROUP BY id

这样,您就完全避免了更新total_comments表的维护任务。

票数 3
EN

Stack Overflow用户

发布于 2010-06-08 05:02:52

这正是我所期望的。id在您指定的集合中,因此total_comments = total_comments + 1。

它不会为相同值的每个实例添加一个:这不是IN的工作方式。IN将返回一个简单的布尔值yes/no。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2993110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档