簡體   English   中英

MySQL-使用子查詢更新列值選擇自身

[英]MySQL - Update column values using subquery select itself

請幫助我進行MySQL更新,以使用select本身返回的結果更新該列。

例如,我有兩個表

表格user(userid int,groupid int)

TABLE線程(threadid int,userid int,sticky tinyint,vip tinyint)

現在,我試圖通過一個更新查詢來實現這一目標,但似乎無法做到這一點。 我認為我應該做的是:

UPDATE user SET groupid=15 WHERE userid IN (SELECT userid FROM thread t LEFT JOIN user u ON u.userid=t.userid WHERE (t.sticky=1 AND t.vip=1) AND (u.groupid=11 OR u.groupid=14) GROUP BY t.userid);

但是MySQL說: #1093-您不能在FROM子句中指定目標表“用戶”進行更新

請幫我!

可以通過從兩個表的左連接生成一個新表,然后從過濾后的結果進行更新來完成此操作,語法如下:

UPDATE user AS nu 
 INNER JOIN
  (SELECT u.userid, u.groupid 
  FROM thread t LEFT JOIN user u 
      ON u.userid=t.userid 
  WHERE (t.sticky=1 AND t.vip=1) AND 
       (u.groupid=11 OR u.groupid=14) 
  GROUP BY t.userid) AS my_table
 ON nu.userid = my_table.userid 
SET nu.groupid = 15;

嘗試使用以下內容:

UPDATE user u2 SET u2.groupid=15 WHERE u2.userid IN (SELECT userid FROM thread t LEFT JOIN user u ON u.userid=t.userid WHERE (t.sticky=1 AND t.vip=1) AND (u.groupid=11 OR u.groupid=14) GROUP BY t.userid);

這應該可以解決問題,希望對您有所幫助:)

您所需的查詢是否與此實質不同...

UPDATE user u
  JOIN thread t 
    ON t.userid = u.userid 
   SET groupid = 15
 WHERE t.sticky = 1 
   AND t.vip = 1
   AND u.groupid IN(11,14);

如果是這樣,那么就如Rockse所建議的那樣,考慮使用Providin適當的DDL(和/或sqlfiddle),以便我們可以更輕松地復制問題以及相應的所需結果集。

update user1 u
left join thread1 t on t.userid = u.userid
where (t.sticky=1 AND t.vip=1) AND (u.groupid=11 OR u.groupid=14) 
set u.groupid = 15
GROUP BY t.userid;

Use this

您可以在查詢之前添加以下內容:

use yourdatabase;

yourdatabase是包含用戶表的數據庫名稱

暫無
暫無

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

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