una tabla registro fila eliminar ejemplo delete datos contenido como borrar mysql delete-row

tabla - eliminar una fila en mysql



¿Cómo eliminar una determinada fila de la tabla mysql con los mismos valores de columna? (5)

Tengo un problema con mis consultas en MySQL. Mi mesa tiene 4 columnas y se ve así:

id_users id_product quantity date 1 2 1 2013 1 2 1 2013 2 2 1 2013 1 3 1 2013

id_users y id_product son claves foráneas de diferentes tablas.

Lo que quiero es eliminar solo una fila:

1 2 1 2013

Lo cual aparece dos veces, así que solo quiero borrarlo.

He intentado esta consulta:

delete from orders where id_users = 1 and id_product = 2

Pero eliminará ambos (ya que están duplicados). ¿Algún consejo para resolver este problema?


Agregar un limit a la consulta de delete

delete from orders where id_users = 1 and id_product = 2 limit 1


Debe especificar el número de filas que se deben eliminar. En su caso (y supongo que solo desea mantener uno) esto se puede hacer así:

DELETE FROM your_table WHERE id_users=1 AND id_product=2 LIMIT (SELECT COUNT(*)-1 FROM your_table WHERE id_users=1 AND id_product=2)


La mejor forma de diseñar una tabla es agregar una fila temporal como incremento automático y mantenerla como clave principal. Entonces podemos evitar tales problemas anteriores.


Todas las tablas deben tener una clave principal (que consta de una o varias columnas), filas duplicadas no tiene sentido en una base de datos relacional. Sin embargo, puedes limitar el número de eliminar filas usando LIMIT :

DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1

Pero eso solo resuelve su problema actual, definitivamente debe trabajar en el problema más grande al definir las claves primarias.


Ya hay respuestas para Eliminar fila por LIMIT . Lo ideal sería que tengas la clave principal en tu mesa. Pero si no hay.

Daré otras formas:

  1. Creando índice único

Veo que Id_users y id_product deben ser únicos en tu ejemplo.

ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)

Esto eliminará las filas duplicadas con los mismos datos.

Pero si aún obtiene un error, incluso si usa la cláusula IGNORE, intente esto:

ALTER TABLE orders ENGINE MyISAM; ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product) ALTER TABLE orders ENGINE InnoDB;

  1. Al crear mesa de nuevo

Si hay varias filas que tienen valores duplicados, también puede recrear la tabla

RENAME TABLE `orders` TO `orders2`; CREATE TABLE `orders` SELECT * FROM `orders2` GROUP BY id_users, id_product;