簡體   English   中英

使用第一個表中的值一次更新兩個表

[英]Update two tables at once, using values from first table

所以,我需要更新表scores ,並使用更新后的值的列won更新第二個表tbl_users 到目前為止,代碼更新了scores ,但是使用了won的舊值來進行第二次表更新:

UPDATE scores a
left join tbl_users b on
    a.uid = b.userID
SET a.won = CASE  
WHEN a.nright = '0' THEN '0' 
WHEN a.nright = '1' THEN '25' 
WHEN a.nright = '2' THEN '50' 
WHEN a.nright = '3' THEN '100' 
WHEN a.nright = '4' THEN '200' 
WHEN a.nright = '5' THEN '400' 
WHEN a.nright = '6' THEN '700' 
WHEN a.nright = '7' THEN '1000' 
END,
b.pts=b.pts+a.won, 
b.pts_total=b.pts_total+a.won
WHERE a.uid=$user AND b.userID=$user

您要做的事情已明確記錄為正確的:

以下語句中的第二個賦值將col2設置為當前(更新)的col1值,而不是原始的col1值。 結果是col1和col2具有相同的值。 此行為不同於標准SQL。

 UPDATE t1 SET col1 = col1 + 1, col2 = col1; 

我認為問題是多表更新,其中set從較早的表中提取值。

您也許可以使用變量來解決此問題。 我不確定100%,但是值得嘗試以下方法:

UPDATE scores s JOIN
       tbl_users u 
       ON s.uid = .uuserID
    SET s.won = (@w := (CASE  WHEN s.nright = '0' THEN '0' 
                              WHEN s.nright = '1' THEN '25' 
                              WHEN s.nright = '2' THEN '50' 
                              WHEN s.nright = '3' THEN '100' 
                              WHEN s.nright = '4' THEN '200' 
                              WHEN s.nright = '5' THEN '400' 
                              WHEN s.nright = '6' THEN '700' 
                              WHEN s.nright = '7' THEN '1000' 
                       END)
                ),
       u.pts = u.pts + @w, 
       u.pts_total = u.pts_total + @w
    WHERE s.uid = $user ;

該文檔強烈建議為單個表順序處理set子句。 las,目前尚不清楚對於多個表是否總是如此。

如果沒有,則可以使用兩個更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM