MySQL更新IN和子查询
-
24-10-2019 - |
题
嗨,我有这样的桌子:
表条目:
id | total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0
表评论:
id |开斋节|评论
_____________________
1 | 1 |评论SDFD
2 | 1 |测试测试
3 | 1 |评论文字
4 | 2 |虚拟评论
5 | 2 |样本评论
6 | 1 | FG FGH DFH
查询我写的:
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
任何帮助将不胜感激。
解决方案
利用:
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))
其他提示
如果您确实需要单独的表中的total_comments,我会做到这一点。
CREATE VIEW entry AS
SELECT id, COUNT(comments) AS total_comment
FROM comments
GROUP BY id
这样,您可以避免完全更新total_comments表的维护任务。
那正是我期望的。 ID在您给它的集合中,因此total_comments = total_comments + 1。
它不会为每个相同值的实例添加一个:这不是工作方式。将返回一个简单的布尔值是/否。
尝试:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM comments
WHERE entry.id = comments.eid
GROUP BY id)
UPDATE entry e
SET total_comments = ( SELECT COUNT(*) FROM comments WHERE eid = e.id)
WHERE
e.id in (SELECT eid FROM comments WHERE id IN (1,2,3,4,5,6))
不隶属于 StackOverflow