我想从查询生成insert to table,但是这个查询可能会抛出除以零的错误:
insert into rpp
select IFNULL(IF((IF(((((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`) +
`s`.`stg_jd`) + `s`.`jdw_pro`) / `p`.`rate`) <= 2),
((`p`.`rate` * 4) - ((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`)
+ `s`.`stg_jd`) + `s`.`jdw_pro`)),0) > 0),
(FLOOR((IF(((((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`)
+ `s`.`stg_jd`) + `s`.`jdw_pro`) / `p`.`rate`) <= 2),
((`p`.`rate` * 4) - ((((`s`.`smi` + `s`.`jmb`) +
`s`.`ruah`) + `s`.`stg_jd`) + `s`.`jdw_pro`)),
0) / `p`.`bets`)) * `p`.`bets`),0),0) AS `rp`
FROM (`produk` `p`LEFT JOIN `stok` `s` ON ((`p`.`kode` = `s`.`kode_produk`)))
提前致谢!
答案 0 :(得分:0)
有多种方法可以解决这个问题。
添加逻辑,您将其除以1,或者您想要处理它。对于这个,这个奇妙的函数IF()
就像IF(condition, then, else)
一样,例如IF(my_column = 0, 1, my_column)
。
另一种方法是相应地设置sql_mode。看一下sql_mode error_for_division_by_zero。
ERROR_FOR_DIVISION_BY_ZERO模式会影响除法的处理 零,包括MOD(N,0)。对于数据更改操作(INSERT, UPDATE),其效果还取决于是否是严格的SQL模式 启用。
如果未启用此模式,除以零将插入NULL并且不会发出警告。
如果启用此模式,则除以零将插入NULL并生成警告。
如果启用此模式和严格模式,除非同时给出IGNORE,除以零会产生错误。对于INSERT IGNORE 和UPDATE IGNORE,除以零插入NULL并生成一个 警告。
对于SELECT,除以零返回NULL。启用 ERROR_FOR_DIVISION_BY_ZERO也会产生警告, 无论是否启用严格模式。
自MySQL 5.7.4起,不推荐使用ERROR_FOR_DIVISION_BY_ZERO。在MySQL中 5.7.4到5.7.7,ERROR_FOR_DIVISION_BY_ZERO在明确命名时不执行任何操作。相反,它的效果包含在效果中 严格的SQL模式。在MySQL 5.7.8及更高版本中,ERROR_FOR_DIVISION_BY_ZERO 明确命名时确实有效,并且不是严格的一部分 模式,如MySQL 5.7.4之前。但是,它应该结合使用 使用严格模式并默认启用。如果发生警告 ERROR_FOR_DIVISION_BY_ZERO已启用,但未启用严格 模式,反之亦然。有关其他讨论,请参阅SQL模式更改 MySQL 5.7。
由于不推荐使用ERROR_FOR_DIVISION_BY_ZERO,因此会将其删除 在未来的MySQL版本中作为单独的模式名称及其效果 包含在严格的SQL模式的影响中。