A veces, las operaciones de actualización ordinarias ya no pueden satisfacer nuestras necesidades y necesitamos realizar actualizaciones específicas de acuerdo con diferentes condiciones. Por ejemplo, un campo se actualiza directamente normalmente y otros campos deben actualizarse según las condiciones. Consulte un ejemplo a continuación.
Datos de la tabla original:
demanda:
1. Para todos los registros, el campo IS_ENABLE se cambia a 1.
2. Para el registro con el ID más grande, la hora IS_ENABLE se cambia a "2017-09-09 09:09:09", y para el resto de los registros, la hora cambia a "2017-01-01 00: 00:00 "
La declaración SQL es la siguiente:
update t_iov_user_car_info set IS_ENABLE=1,
LAST_UPDATED_DATE=
(
case when id=(select a.id from (select max(id) id from t_iov_user_car_info uc where uc.USER_ID_CARD=4) a)
then '2017-09-09 09:09:09'
else '2017-01-01 00:00:00' end
)
where USER_ID_CARD=4
Resultados del:
Como puede ver, todos los datos del campo IS_ENABLE se han cambiado a 1. Aquí hay una operación de cambio normal.
Para otros registros, la hora se cambió a: 2017-01-01 00:00:00, y para el registro con la identificación más grande (id = 233), la hora se cambió a: 2017-09-09 09:09: 09.
Esto es para hacer una actualización específica.
Análisis SQL:
Entre ellos, el comunicado:
select max(id) id from t_iov_user_car_info uc where uc.USER_ID_CARD=4
Es para consultar la identificación más grande. Entonces, ¿por qué agregar delante de esta declaración?
seleccione a.id de? Esto se debe a que mysql no puede seleccionar algunos valores en la misma tabla primero y luego actualizar la tabla (en la misma declaración); de lo contrario, informará un error:
"No puede especificar la tabla de destino para la actualización en la cláusula FROM "。
La solución es volver a seleccionar el resultado de la selección a través de la tabla intermedia, para evitar el error.
Tenga en cuenta que este problema solo ocurre en mysql, mssql y oracle no tendrá este problema.
La siguiente declaración SQL:
LAST_UPDATED_DATE=
(
case when id=(select a.id from (select max(id) id from t_iov_user_car_info uc where uc.USER_ID_CARD=4) a)
then '2017-09-09 09:09:09'
else '2017-01-01 00:00:00' end
)
Su significado es muy claro, equivalente al código java:
if(id=最大){
LAST_UPDATED_DATE='2017-09-09 09:09:09' ;
}else{
LAST_UPDATED_DATE='2017-01-01 00:00:00' ;
}
OK, eso es todo。