UPDATE members
SET money=money+100
WHERE username IN (
SELECT username
FROM forum
);
让我们说我想在我的论坛中为每个帖子给每个帖子100个钱。此查询有效,但如果一个成员发布了多次,则只能获得100个。有人可以更正此查询吗?
答案 0 :(得分:4)
您可以继续使用您在where
语句本身的set
子句中使用的相同子查询。
喜欢这个
update members m
set money=money+100*(
select count(*) from forum f
where f.username = m.username);
答案 1 :(得分:0)
我认为您误解了 - 您的查询将更新members
中forum
表中用户名存在的所有行,而不是每个成员的第一个匹配项。
答案 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