es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible utilizar la cláusula LIMIT con la instrucción DELETE en MySQL.

    Una solución que funciona si la tabla tiene un campo id sería:

    DELETE FROM `tabla` WHERE `id` >= 20 LIMIT 20
    

    Sin embargo, esto requiere que encuentres primero cuál es el valor del vigésimo id y que exista un campo id. No todas tus tablas tienen campos id. También dará resultados diferentes si las filas de la tabla están en un orden diferente al ascendente por id.

    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ón DELETE con la cláusula WHERE para eliminarlas.

Comments are closed.