MYSQL使用select语句中的结果行执行重复的UPDATE

时间:2016-03-09 22:39:02

标签: mysql loops subquery repeat

UPDATE tb_user SET user_level = user_level - 100 WHERE id IN (SELECT id FROM tb_levels WHERE factor = 10);

tb_user:

-----------------
 id | user_level
-----------------
  1 | 1000
  2 | 1500
  3 | 3000
  4 | 2500
-----------------

tb_levels:

-----------------
 id | factor
-----------------
  1 | 10
  1 | 10
  2 | 10
  2 | 10
  3 | 12
  5 | 20
-----------------

我认为tb_user中的结果应该是:

-----------------
 id | user_level
-----------------
  1 | 800
  2 | 1300

但它是:

-----------------
 id | user_level
-----------------
  1 | 900
  2 | 1400

如何对结果800和1200执行查询?感谢。

2 个答案:

答案 0 :(得分:0)

您需要计算另一个表中出现的id的次数。试试这个:

Negative scores:
-30 -50 -70 -40 
Positive scores:
30 50 70 40 

答案 1 :(得分:0)

这样的事情。使用JOIN

UPDATE tb_user u
    JOIN (SELECT id, count(*) AS c FROM tb_levels WHERE factor = 10 GROUP BY id) i ON u.id = i.id
SET user_level = user_level - 100 * i.c