【发布时间】:2014-10-07 08:03:13
【问题描述】:
请帮助我更新 MySQL 以使用 select 本身的结果返回来更新列。
例如,我有两张桌子
表用户( 用户 ID 整数, groupid 整数 )
TABLE 线程 ( threadid int, 用户 ID 整数, 粘性微小, 贵宾小号 )
现在我正在尝试通过单个更新查询来实现这一点,但似乎无法做到。我认为我应该做的是:
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 子句中指定目标表 'user' 进行更新
请帮帮我!
【问题讨论】:
-
一般来说,在没有任何聚合函数的情况下,使用 GROUP BY 子句是个坏主意。 MySQL 可以原谅(甚至优化)这种异常,但它通常会导致意外或错误的结果。此外,除非您包含 IS NULL 比较,否则在您不选择任何列的表上的 LEFT JOIN 只是很奇怪!
-
GROUP BY 因为结果返回了重复的用户 ID。我怎样才能解决这个问题,只用一个查询?
标签: mysql