You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL UPDATE语句中让计算结果小于0的RECEITA_ADM_YMF字段置0

解决MySQL UPDATE中设置字段值不小于0的问题

问题描述

我正在使用的SQL代码如下:

UPDATE `tab_base_asset` 
INNER JOIN `vw_calcula_taxa_adm_ymf_acumulada_3` 
    ON `tab_base_asset`.`codigo_fundo` = `vw_calcula_taxa_adm_ymf_acumulada_3`.`codigo_fundo`
SET `tab_base_asset`.`RECEITA_ADM_YMF` = (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`receita_YMF_ACUM`, 
    `tab_base_asset`.`RECEITA_REBATE` = (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`Rebate_acumulado`
WHERE `tab_base_asset`.`data` = (SELECT `tab_aux_datas_base_unica`.`data_final` FROM `tab_aux_datas_base_unica`); 

需要实现:当RECEITA_ADM_YMF的计算结果小于0时,将该列的值设为0。尝试过IF和CASE语句,但要么报语法错误,要么不确定放置位置。

解决方案

直接在SET子句的赋值部分,用IF()函数或CASE语句包裹计算表达式即可实现条件判断。

方法1:使用IF()函数

UPDATE `tab_base_asset` 
INNER JOIN `vw_calcula_taxa_adm_ymf_acumulada_3` 
    ON `tab_base_asset`.`codigo_fundo` = `vw_calcula_taxa_adm_ymf_acumulada_3`.`codigo_fundo`
SET `tab_base_asset`.`RECEITA_ADM_YMF` = IF(
    -- 判断计算结果是否小于0
    (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`receita_YMF_ACUM` < 0,
    0, -- 满足条件时设为0
    -- 不满足时用原计算值
    (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`receita_YMF_ACUM`
), 
    `tab_base_asset`.`RECEITA_REBATE` = (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`Rebate_acumulado`
WHERE `tab_base_asset`.`data` = (SELECT `tab_aux_datas_base_unica`.`data_final` FROM `tab_aux_datas_base_unica`); 

方法2:使用CASE语句

UPDATE `tab_base_asset` 
INNER JOIN `vw_calcula_taxa_adm_ymf_acumulada_3` 
    ON `tab_base_asset`.`codigo_fundo` = `vw_calcula_taxa_adm_ymf_acumulada_3`.`codigo_fundo`
SET `tab_base_asset`.`RECEITA_ADM_YMF` = CASE
    WHEN (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`receita_YMF_ACUM` < 0 THEN 0
    ELSE (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`receita_YMF_ACUM`
END, 
    `tab_base_asset`.`RECEITA_REBATE` = (`tab_base_asset`.`saldo_bruto_cdc`/`vw_calcula_taxa_adm_ymf_acumulada_3`.`saldo_bruto_cdc`) * `vw_calcula_taxa_adm_ymf_acumulada_3`.`Rebate_acumulado`
WHERE `tab_base_asset`.`data` = (SELECT `tab_aux_datas_base_unica`.`data_final` FROM `tab_aux_datas_base_unica`); 

说明

  • 两种写法都兼容MySQL Workbench 5.2版本,不会出现语法错误。
  • 若不想重复编写计算表达式,可先通过子查询算出该值再进行判断,但上述写法更直接简洁。

内容的提问来源于stack exchange,提问作者Marcos Antonio de Jesus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:01:11