嗨,我有这样的表格:
表条目:
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我写道:
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
任何帮助都将不胜感激。
发布于 2010-06-08 05:04:43
使用:
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))
发布于 2010-06-08 05:04:00
如果你真的需要在一个单独的表中使用total_comments,我会把它变成一个视图。
CREATE VIEW entry AS
SELECT id, COUNT(comments) AS total_comment
FROM comments
GROUP BY id
这样,您就完全避免了更新total_comments表的维护任务。
发布于 2010-06-08 05:02:52
这正是我所期望的。id在您指定的集合中,因此total_comments = total_comments + 1。
它不会为相同值的每个实例添加一个:这不是IN的工作方式。IN将返回一个简单的布尔值yes/no。
https://stackoverflow.com/questions/2993110
复制相似问题