2010-05-09 109 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