[英]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.