Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] DELETE fila según resultado de JOIN

Estas en el tema de DELETE fila según resultado de JOIN en el foro de Mysql en Foros del Web. Buenos días, Os pongo un poco en situación.... En mi BD tengo unas tablas relacionadas de la siguiente manera: movimientos Id idequipos_contadores (FK a equipos_contadores) ...
  #1 (permalink)  
Antiguo 20/03/2014, 02:30
 
Fecha de Ingreso: junio-2012
Ubicación: Cerca del mar
Mensajes: 19
Antigüedad: 12 años, 4 meses
Puntos: 0
DELETE fila según resultado de JOIN

Buenos días,
Os pongo un poco en situación....
En mi BD tengo unas tablas relacionadas de la siguiente manera:

movimientos
Id
idequipos_contadores (FK a equipos_contadores)

equipos_contadores
Id
idequipo (FK a equipos)

equipos
Id
idinstalacion (FK a instalaciones)

instalaciones
Id

Lo que quiero es poder borrar los movimientos que pertenezcan a una instalación concreta (la última tabla de la relación)

Había intentando esta query
Código:
DELETE FROM bdaforo.movimientos_contadores 
WHERE idmovimientos_contadores IN (
	SELECT mc.idmovimientos_contadores 
	FROM bdaforo.movimientos_contadores mc 
	LEFT JOIN bdaforo.equipos_contadores ec 
	ON mc.idequipos_contadores = ec.idequipos_contadores 
	LEFT JOIN bdaforo.equipos e 
	ON ec.idequipo = e.idequipos 
	LEFT JOIN bdaforo.instalaciones i 
	ON e.idInstalacion = i.idInstalacion 
	WHERE i.idInstalacion = '8'
) AND fecha_horaRegistro BETWEEN '2014-03-01 00:00:00' AND '2014-03-12 00:00:00'
pero me da el error Error Code: 1093. You can't specify target table 'movimientos_contadores' for update in FROM clause

Como debería hacerlo??

Gracias!
  #2 (permalink)  
Antiguo 20/03/2014, 07:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: DELETE fila según resultado de JOIN

Vamos por partes

Código MySQL:
Ver original
  1. SELECT equipos_contadores.id
  2. FROM equipos
  3.        INNER JOIN
  4.            equipos_contadores
  5.                ON equipos.id = equipos_contadores.idequipo
  6. WHERE equipos.idinstalacion=8

con esto tendriamos los equipos afectados, luego

Código MySQL:
Ver original
  1. DELETE FROM bdaforo.movimientos_contadores
  2. WHERE idequipos_contadores
  3.            IN (SELECT equipos_contadores.id
  4.                    FROM equipos
  5.                         INNER JOIN
  6.                               equipos_contadores
  7.                                     ON equipos.id = equipos_contadores.idequipo
  8.                WHERE equipos.idinstalacion=8)
  9.          AND fecha_horaRegistro
  10.                 BETWEEN '2014-03-01 00:00:00' AND '2014-03-12 00:00:00'
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 20/03/2014, 09:28
 
Fecha de Ingreso: junio-2012
Ubicación: Cerca del mar
Mensajes: 19
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: DELETE fila según resultado de JOIN

Gracias!
Al final había conseguido hacerlo pero me había complicado demasiado. El tuyo mucho mejor, más claro y menos vueltas.

Saludos!

Etiquetas: delete, fila, join, registro, resultado, según, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.