MySQL根据该随机数更新具有随机和条件值的2列

问题描述 投票:0回答:1

我有这样的表格,日期格式为YYYY-MM-DD

id | state_id | created_on  | closed_on  |
1  | 1        | 2020-02-19  | NULL       |
2  | 2        | 2020-01-02  | 2020-01-03 |
3  | 1        | 2020-01-05  | NULL       |
4  | 4        | 2020-02-07  | 2020-02-08 |
4  | 3        | 2020-02-20  | NULL       |

我需要使用2到6 WHERE之间的随机状态更新STATE

  • state_id为1或state_id为3
  • created_on已经过去

我可以这样做(它可以正常工作):

UPDATE table SET state_id = FLOOR(2 + rand() * 6) 
WHERE created_on < CURRENT_DATE()
AND (state_id=1 OR state_id=3)

我需要在同一更新中另外做的是设置closed_on

  • 如果新随机状态为3],则为NULL
  • CURRENT_DATE()如果新的随机状态
  • 并非3

    我考虑过使用SET @newState = FLOOR(2 + rand() * 6),但是所有记录都具有相同的state_id

是否可以使用不同的值进行更新?

类似的东西

UPDATE table SET state_id = FLOOR(2 + rand() * 6), closed_on = IF(new_state_id = 3, NULL, CURRENT_DATE())
WHERE created_on < CURRENT_DATE()
AND (state_id=1 OR state_id=3)

我有这样一个表格,日期格式为YYYY-MM-DD id | state_id | created_on | close_on | 1 | 1 | 2020-02-19 | NULL | 2 | 2 | 2020-01-02 | 2020-01-03 | 3 | 1 | ...

mysql sql random sql-update mysql-5.7
1个回答
2
投票

您可以使用计算随机数的子查询将表自联接,因此您可以在外部查询中重用该值:


0
投票

您可以使用user-defined variables

© www.soinside.com 2019 - 2024. All rights reserved.