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