SQL更新语句需求:各筹码颜色值限current_turn后求和更新points
改写后的SQL语句
直接上满足需求的UPDATE语句:
UPDATE score SET points = LEAST(red_chips, current_turn) + LEAST(blue_chips, current_turn) + LEAST(green_chips, current_turn) + LEAST(yellow_chips, current_turn) + LEAST(white_chips, current_turn);
实现思路说明
核心是用LEAST()函数搞定每个筹码字段的上限控制:
LEAST(字段名, current_turn)会自动返回两个值中较小的那个,刚好匹配你的要求:如果字段值大于current_turn,就取current_turn;否则直接用字段本身的值。- 把五个颜色字段经过
LEAST()处理后的值相加,就是最终要赋值给points的求和结果。
兼容备选方案(针对不支持LEAST()的数据库)
如果你的数据库(比如旧版SQL Server)不支持LEAST()函数,可以用CASE语句替代逻辑,举个完整的例子:
UPDATE score SET points = CASE WHEN red_chips > current_turn THEN current_turn ELSE red_chips END + CASE WHEN blue_chips > current_turn THEN current_turn ELSE blue_chips END + CASE WHEN green_chips > current_turn THEN current_turn ELSE green_chips END + CASE WHEN yellow_chips > current_turn THEN current_turn ELSE yellow_chips END + CASE WHEN white_chips > current_turn THEN current_turn ELSE white_chips END;
内容的提问来源于stack exchange,提问作者Kelly Ward
相关产品推荐
相关产品推荐

