2011-06-09 28 views
5

tengo 3 columnas (id, padres, valor) con algunos datos y esta consulta:Eliminar la selección en MySQL

SELECT * FROM test WHERE id = (
    SELECT parent FROM test WHERE id=2 AND value='value' LIMIT 1 
); 

La consulta anterior funciona muy bien.

Ahora, ¿cómo puedo eliminar en lugar de seleccionar esa identificación en una consulta?

Respuesta

8

No se puede eliminar de una tabla y seleccionar de la misma tabla en una subselección.

Sin embargo, puede usar esa tabla en una auto-unión.

DELETE t1 FROM test t1 
INNER JOIN test t2 ON (t1.id = t2.parent) 
WHERE t2.id = 2 and t2.value = 'value' 

No puede utilizar limit no order by en una instrucción de eliminación unido.
Es la unión o el límite/orden, elija su elección.

Ver: http://dev.mysql.com/doc/refman/5.5/en/delete.html

+0

¿Qué pasa si el niño es eliminado primero? –

+0

@Justin, esto solo eliminará elementos en t1. MySQL usará una tabla temporal si es necesario para mantener los valores en el conjunto de resultados unido. – Johan

+0

No lo entiendo ¿De dónde obtuviste t1 y t2? Tengo una prueba de mesa. – Alqin

4
DELETE FROM test WHERE id = (select * from (
    SELECT parent FROM test WHERE id=2 AND value='value' LIMIT 1) as t 
) 
+3

¿Lo has probado antes que yo Downvote? –

+0

¡Esto realmente funciona! Mi primera impresión fue que no funcionará, pero lo hace. Tanques! – Alqin

+0

@Nick, sí, y además, el texto en el comentario es una cita literal del enlace proporcionado. – Johan

Cuestiones relacionadas