MYSQL 使用来自 select 语句的结果行执行重复更新
MYSQL perform repeated UPDATEs using resulting rows from select statement
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如何查询?谢谢。
您需要计算 id 在另一个 table 中出现的次数。试试这个:
UPDATE tb_user SET user_level = user_level - (100 * ct)
FROM tb_user
INNER JOIN
(
SELECT id, count(*) ct FROM tb_levels WHERE factor = 10 GROUP BY id
) as idCount ON tb_user.id = idCount.id
类似的东西。使用 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
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如何查询?谢谢。
您需要计算 id 在另一个 table 中出现的次数。试试这个:
UPDATE tb_user SET user_level = user_level - (100 * ct)
FROM tb_user
INNER JOIN
(
SELECT id, count(*) ct FROM tb_levels WHERE factor = 10 GROUP BY id
) as idCount ON tb_user.id = idCount.id
类似的东西。使用 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