繁体   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