UPDATE members
SET money=money+100
WHERE username IN (
SELECT username
FROM forum
);
可以说我想给我的每个成员100我的论坛中的每个职位的钱。此查询有效,但是如果一个成员发布了多次,他们只会得到100.请问有人可以更正此查询吗?MySQL子查询
UPDATE members
SET money=money+100
WHERE username IN (
SELECT username
FROM forum
);
可以说我想给我的每个成员100我的论坛中的每个职位的钱。此查询有效,但是如果一个成员发布了多次,他们只会得到100.请问有人可以更正此查询吗?MySQL子查询
您可以继续使用您的where
子句中使用的set
语句本身相同的子查询。
喜欢这张
update members m
set money=money+100*(
select count(*) from forum f
where f.username = m.username);
你甚至可以用1代替f.username :)但是你可以编辑你的文章,使其更具可读性,尤其是代码格式? – 2010-11-26 08:03:16
+1头和肩膀以上的其他答案。 – PerformanceDBA 2010-12-15 09:59:57
对不起,我花了这么长的时间来设置这个接受的答案! – Juddling 2012-04-15 00:32:07
我想你会误解 - 你的查询将更新members
中用户名存在于forum
表中的所有行,而不是每个成员的第一个匹配。
我想你想这是一个动态查询,而不是更新的成员表:
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)
另一个这里的问题是什么时候做的更新 - 这将最好的触发器来完成这样它看起来更像是仅在当前论坛插入当前用户名参数化的语句。
心连心
UPDATE成员 SET钱=钱+ 100 WHERE用户名IN(
SELECT用户名 FROM论坛 );
是
更新M集的钱=金钱+从m的 (计数(f.username)* 100) 上f.username内加入论坛F = m.username
您可以显示成员和论坛表的字段? – Himadri 2010-05-12 06:15:45
1)你可以请检查答案,投票,并选择一个。 2)将“IN”更改为“=”并消除工作台。 – PerformanceDBA 2010-12-15 10:03:50