我有一张临时表
CREATE TEMPORARY TABLE `tmp_horario` (
`horas_reales` decimal(7,6) unsigned DEFAULT NULL,
`sede` varchar(3) DEFAULT NULL,
`periodo` varchar(6) DEFAULT NULL,
`crn` int(10) unsigned DEFAULT '0',
`materia` varchar(4) DEFAULT NULL,
`curso` varchar(5) DEFAULT NULL,
`titulo` varchar(100) DEFAULT NULL,
`estatus` varchar(1) DEFAULT NULL,
`seccion` varchar(3) DEFAULT NULL,
`nivel` varchar(2) DEFAULT NULL,
`tipo` varchar(3) DEFAULT NULL,
`sesion` varchar(2) DEFAULT NULL,
`horas_clase` decimal(9,3) unsigned DEFAULT NULL,
`horas_totales` decimal(9,3) unsigned DEFAULT NULL,
`horas_pago` decimal(9,3) unsigned DEFAULT NULL,
`horas_contacto` decimal(9,3) unsigned DEFAULT NULL,
`horas_globales` decimal(9,3) unsigned DEFAULT NULL,
`hora_inicio` varchar(4) DEFAULT NULL,
`hora_fin` varchar(4) DEFAULT NULL,
`lunes` varchar(1) DEFAULT NULL,
`martes` varchar(1) DEFAULT NULL,
`miercoles` varchar(1) DEFAULT NULL,
`jueves` varchar(1) DEFAULT NULL,
`viernes` varchar(1) DEFAULT NULL,
`sabado` varchar(1) DEFAULT NULL,
`no_programado` tinyint(3) unsigned DEFAULT NULL,
KEY `k_sede` (`sede`),
KEY `k_crn` (`crn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
我用这样的选择填充记录
select
s.ssbsect_camp_code sede
, s.ssbsect_term_code periodo
, s.ssbsect_crn crn
...
,0 horas_reales -- This value is filled later
, m.ssrmeet_begin_time hora_inicio
, m.ssrmeet_end_time hora_fin
FROM a table with a lot of joins and complex conditions
一切都好。 但是在下一步中,我用这个
填充计算列 update tmp_horario h
set h.horas_reales = if(
h.horas_contacto / h.horas_globales * h.horas_pago > h.horas_contacto
, h.horas_contacto
, h.horas_contacto / h.horas_globales * h.horas_pago);
正如您所看到的那样,只有列horas_reales被设置,但不知何故是邻居列" hora_inicio"即使没有设置也没有添加到更新中,它也会被更改。
这是更新之前和之后的行,不需要的列(下一个)的值丢失
horas_reales|hora_inicio | hora_fin
0 |1100 | 1156
to
1 |(empty) | 1156
如果我不进行更新,问题就会消失(不可能)
或者如果我从de create table中删除"填充",0 horas_reales
(可能我只将它用作占位符以便稍后填充)。
所以问题是为什么会发生这种情况,这是一个错误还是我做错了什么?