mysql realiza actualizaciones específicas según las condiciones

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。


Supongo que te gusta

Origin blog.csdn.net/u012660464/article/details/78615916
Recomendado
Clasificación