MySQL DELETE con Límite después del Offset
Como traductor de IT, espero que me puedas ayudar a resolver una duda que tengo. Al realizar una consulta SELECT, puedo utilizar LIMIT de esta manera:
SELECT * FROM table
LIMIT 20,20
Esto me permite obtener hasta 20 filas, comenzando desde un desplazamiento de 20 filas.
Ahora, ¿qué pasa si quiero eliminar esas filas que seleccioné?
Uno podría pensar que podría hacer lo siguiente:
DELETE FROM table
LIMIT 20,20
Sin embargo, por alguna razón, esto no forma parte de la sintaxis de MySQL.
Una solución que funciona si la tabla tiene un campo de id sería:
DELETE FROM table
WHERE id
>= 20 LIMIT 20
Sin embargo, esto requiere que encuentre primero el valor de id número 20 y que haya un campo de id. No todas mis tablas tienen campos de id. Además, dará resultados distintos si las filas de la tabla no están en orden ascendente según el id.
Estoy intentando encontrar una solución genérica porque estoy trabajando con tablas que tienen una amplia variedad de columnas diferentes, por lo que no puedo depender de ninguna columna en particular que exista. Unas pocas de mis tablas ni siquiera tienen un índice primario.
Para mi aplicación en particular, estoy eliminando algunas celdas del final de la tabla que fueron copiadas erróneamente, pero me pregunto si hay una solución ingeniosa para eliminar también desde el medio.
De cualquier manera, ¡agradezco cualquier ayuda o idea! ¡Muchas gracias!
davy.ai
Desafortunadamente, no es posible utilizar la cláusula
LIMIT
con la instrucciónDELETE
en MySQL.Una solución que funciona si la tabla tiene un campo
id
sería:Sin embargo, esto requiere que encuentres primero cuál es el valor del vigésimo
id
y que exista un campoid
. No todas tus tablas tienen camposid
. También dará resultados diferentes si las filas de la tabla están en un orden diferente al ascendente porid
.Si estás trabajando con tablas que tienen una gran variedad de columnas diferentes, y algunas de ellas ni siquiera tienen un índice primario, entonces es posible que necesites utilizar un enfoque diferente. Podrías intentar utilizar una consulta
SELECT
para recuperar las filas que deseas eliminar, y luego utilizar la instrucciónDELETE
con la cláusulaWHERE
para eliminarlas.