MYSQL UPDATE与和子查询
嗨,我有一个像这样的表:MYSQL UPDATE与和子查询
表项:
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
查询我写:
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))
这正是我所期望的。该ID是你给它的集合,所以total_comments = total_comments + 1.
它不会为同一个值的每个实例添加一个:这不是如何工作。 IN将返回一个简单的布尔是/否。
我知道......但我想一些方法,使我可以在subqery算entry.id的数量。 我可以通过运行子查询sperate,然后使用for循环运行更新查询来完成所有这些操作。但我想在一个查询这是我的porblem :( – Johal 2010-06-08 14:39:32
尝试:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM comments
WHERE entry.id = comments.eid
GROUP BY id)
这将运行在入口表中的所有记录,但我想运行只有指定的记录这就是为什么我用IN子句... – Johal 2010-06-08 14:37:07
如果你真的需要TOTAL_COMMENTS在一个单独的表,我会作出这样的景色。
CREATE VIEW entry AS
SELECT id, COUNT(comments) AS total_comment
FROM comments
GROUP BY id
这样可以避免完全更新total_comments表的维护任务。
+1:我完全同意,这是一个比当前表结构更好的设计选择 – 2010-06-07 21:14:02
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))
是的,我正在寻找类似的东西...我的动机是运行基于子查询的更新查询....其更新“entry”表中的“total_comments”与acutal “条目”中的ID 如果我运行查询,我已经指定它只会为子查询中发现的所有数量的子数增加1.在子查询运行后,sql查询变成什么样子: UPDATE条目 SET total_comments = total_comments + 1 WHERE id IN(1,1,1,2,2,1) 因此更新只对入口表中的1和2个ID运行一次。因为它如何工作。但我想要一些如何运行4次1和2次为2. – Johal 2010-06-08 14:28:12
唯一的办法,我认为是运行子查询这样的事情,我不知道该怎么办: UPDATE条目 SET total_comments = total_comments + @count WHERE ID IN(SELECT eid,count(*)as @count FROM comments WHERE id IN(1,2,3,4,5,6)) 但是然后在Innt不工作因为多行和我也不知道如何在设置条件中提到@count :( – Johal 2010-06-08 14:30:43