MySQL子查询

时间:2010-05-09 13:37:29

标签: mysql

UPDATE members 
    SET money=money+100 
WHERE username IN (    
                   SELECT username 
                     FROM forum
                  );

让我们说我想在我的论坛中为每个帖子给每个帖子100个钱。此查询有效,但如果一个成员发布了多次,则只能获得100个。有人可以更正此查询吗?

4 个答案:

答案 0 :(得分:4)

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

喜欢这个

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

答案 1 :(得分:0)

我认为您误解了 - 您的查询将更新membersforum表中用户名存在的所有行,而不是每个成员的第一个匹配项。

答案 2 :(得分:0)

更新会员     SET money = money + 100 用户名为IN(
                   SELECT用户名                      来自论坛                   );

更新m set money = money +(count(f.username)* 100) 来自会员m f.username = m.username

上的内连接论坛f

答案 3 :(得分:-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 )

这里的另一个问题是何时进行更新 - 这最好在触发器中完成,因此它看起来更像是当前论坛插入中当前用户名的参数化语句。

HTH