更新行(来自 select 的结果)mysql
Update rows by (results from select) mysql
有没有人可以帮助我根据 select 的结果更新所有行?:
UPDATE newser
SET total_rating = total_rating + (((RESULTS FROM SELECT)))
WHERE bdate >= NOW() - INTERVAL 12 HOUR
AND usertext = 'maxer12'
(((SELECT))):
SELECT DATE_FORMAT(`bdate`, '%i') FROM newser
我想更新一些存在于 total_rating
列中的数字,方法是向它们添加来自 (((RESULTS FROM SELECT))
的结果
所以它应该是这样的:
UPDATE newser
SET total_rating = total_rating + (SELECT DATE_FORMAT(`bdate`, '%i') FROM newser)
WHERE bdate >= NOW() - INTERVAL 12 HOUR
AND usertext = 'maxer12'
这是实现此目标的正确方法吗?
非常感谢任何帮助。
TABLE 更新前:
| id | date| total_result | username |
| 1 | 4 | 3 | maxer12 |
| 2 | 4 | 6 | maxer12 |
| 3 | 5 | 5 | maxer12 |
| 4 | 5 | 4 | maxer12 |
| 5 | 33 | 3 | maxer12 |
TABLE 更新后:(date+total_result ) 在同一个 table:
| id | date| total_result | username |
| 1 | 4 | 7 | maxer12 |
| 2 | 4 | 10 | maxer12 |
| 3 | 5 | 10 | maxer12 |
| 4 | 5 | 9 | maxer12 |
| 5 | 33 | 36 | maxer12 |
您可以使用 INNER JOIN
。我认为 id
是唯一的,您可能有一些其他列来构成连接条件。请记住,在几乎所有情况下,连接都比子查询执行得更快。并且在使用 join 进行更新时不能使用限制。
UPDATE newser n
INNER JOIN
(
SELECT id, DATE_FORMAT(`bdate`, '%i') as total_rating1
FROM newser
) as n1
on n.id=n1.id
SET n.total_rating = n.total_rating + n1.total_rating
WHERE bdate >= NOW() - INTERVAL 12 HOUR AND usertext ='maxer12';
有没有人可以帮助我根据 select 的结果更新所有行?:
UPDATE newser
SET total_rating = total_rating + (((RESULTS FROM SELECT)))
WHERE bdate >= NOW() - INTERVAL 12 HOUR
AND usertext = 'maxer12'
(((SELECT))):
SELECT DATE_FORMAT(`bdate`, '%i') FROM newser
我想更新一些存在于 total_rating
列中的数字,方法是向它们添加来自 (((RESULTS FROM SELECT))
所以它应该是这样的:
UPDATE newser
SET total_rating = total_rating + (SELECT DATE_FORMAT(`bdate`, '%i') FROM newser)
WHERE bdate >= NOW() - INTERVAL 12 HOUR
AND usertext = 'maxer12'
这是实现此目标的正确方法吗?
非常感谢任何帮助。
TABLE 更新前:
| id | date| total_result | username |
| 1 | 4 | 3 | maxer12 |
| 2 | 4 | 6 | maxer12 |
| 3 | 5 | 5 | maxer12 |
| 4 | 5 | 4 | maxer12 |
| 5 | 33 | 3 | maxer12 |
TABLE 更新后:(date+total_result ) 在同一个 table:
| id | date| total_result | username |
| 1 | 4 | 7 | maxer12 |
| 2 | 4 | 10 | maxer12 |
| 3 | 5 | 10 | maxer12 |
| 4 | 5 | 9 | maxer12 |
| 5 | 33 | 36 | maxer12 |
您可以使用 INNER JOIN
。我认为 id
是唯一的,您可能有一些其他列来构成连接条件。请记住,在几乎所有情况下,连接都比子查询执行得更快。并且在使用 join 进行更新时不能使用限制。
UPDATE newser n
INNER JOIN
(
SELECT id, DATE_FORMAT(`bdate`, '%i') as total_rating1
FROM newser
) as n1
on n.id=n1.id
SET n.total_rating = n.total_rating + n1.total_rating
WHERE bdate >= NOW() - INTERVAL 12 HOUR AND usertext ='maxer12';