2010-05-09 110 views
3
UPDATE members 
    SET money=money+100 
WHERE username IN ( 
        SELECT username 
        FROM forum 
       ); 

可以说我想给我的每个成员100我的论坛中的每个职位的钱。此查询有效,但是如果一个成员发布了多次,他们只会得到100.请问有人可以更正此查询吗?MySQL子查询

+0

您可以显示成员和论坛表的字段? – Himadri 2010-05-12 06:15:45

+0

1)你可以请检查答案,投票,并选择一个。 2)将“IN”更改为“=”并消除工作台。 – PerformanceDBA 2010-12-15 10:03:50

回答

4

您可以继续使用您的where子句中使用的set语句本身相同的子查询。

喜欢这张

update members m 
    set money=money+100*(
        select count(*) from forum f 
         where f.username = m.username); 
+0

你甚至可以用1代替f.username :)但是你可以编辑你的文章,使其更具可读性,尤其是代码格式? – 2010-11-26 08:03:16

+0

+1头和肩膀以上的其他答案。 – PerformanceDBA 2010-12-15 09:59:57

+0

对不起,我花了这么长的时间来设置这个接受的答案! – Juddling 2012-04-15 00:32:07

0

我想你会误解 - 你的查询将更新members中用户名存在于forum表中的所有行,而不是每个成员的第一个匹配。

-1

我想你想这是一个动态查询,而不是更新的成员表:

select username, count(username)*100 as money 
from forum 
group by username 
order by username 

,如果你必须在成员表中有它,那么这个查询都可以在您的更新类似于使用以下:

update members m 
set money = (select count(username)*100 from forum f where f,username = m.username) 

另一个这里的问题是什么时候做的更新 - 这将最好的触发器来完成这样它看起来更像是仅在当前论坛插入当前用户名参数化的语句。

心连心

+1

不按要求执行更新。也许你可以扩展你的答案? – 2010-05-09 13:44:41

+1

你必须加入这个表与成员表来更新成员 – Zai 2010-05-09 13:45:02

+0

中的货币字段主查询​​没有where子句,这是不是只更新成员表中的每一行? – Juddling 2010-05-09 15:15:34

0

UPDATE成员 SET钱=钱+ 100 WHERE用户名IN(
SELECT用户名 FROM论坛 );

更新M集的钱=金钱+从m的 (计数(f.username)* 100) 上f.username内加入论坛F = m.username