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