Pregunta

Tengo un (MySQL) tabla de base de datos con las siguientes columnas:

NAME | String (Unique)

STATUS | int

UPDATE_COUNT | int (Unique)

Quiero que el valor de Max (UPDATE_COUNT) para reflejar el número acumulativo de actualizaciones realizadas en las filas de la tabla. Por ejemplo, a partir de una tabla vacía:

Insert - (Name=John, Status=0) -  // update count on that row is set to 1

Insert - (Name=Mary, Status=0) -  // update count on that row is set to 2

Update - (Name=John, Status=1) -  // update count on that row is set to 3

Update - (Name=Mary, Status=2) -  // update count on that row is set to 4

etc ..

Así que para cualquier fila, si actualiza o se inserta, el valor de la cuenta de actualización que se inserta inserta o se actualiza con cada fila es Max (update_count) + 1.

La idea es que "seleccionar max (update_count) de mitabla" el resultado representa el número total de inserciones / actualizaciones realizado.

Me gustaría escribir inserción y actualización de las sentencias SQL que se incrementan el valor de update_count automáticamente, algo como:

"UPDATE MYTABLE SET STATUS=1,UPDATE_COUNT=(SELECT MAX(UPDATE_COUNT) FROM MYTABLE) WHERE NAME IN ('John', 'Mary')"

Sin embargo, esto no es válida SQL, una instrucción de actualización mi no contiene una cláusula de selección de la misma tabla, el error en MySQL es:

"You can't specify target table 'MYTABLE' for update in FROM clause"

¿Alguna sugerencia sobre cómo podía romperse esta limitación?

¿Fue útil?

Solución

Sólo piensan que la solución en el excelente blog Xaprb:

http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top