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

Borrar datos de una consulta entre dos tablas

Estas en el tema de Borrar datos de una consulta entre dos tablas en el foro de Bases de Datos General en Foros del Web. Espero puedan darme una mano con esto..... Realizo esta consulta: Código PHP: INSERT INTO tabla3  ( "" , "" , "" , "" )              SELECT  *  ...
  #1 (permalink)  
Antiguo 03/06/2008, 14:51
Avatar de maxi_lance  
Fecha de Ingreso: julio-2006
Ubicación: Capital Federal
Mensajes: 220
Antigüedad: 17 años, 10 meses
Puntos: 2
Borrar datos de una consulta entre dos tablas

Espero puedan darme una mano con esto.....

Realizo esta consulta:
Código PHP:
INSERT INTO tabla3 ("","","","")
            
SELECT FROM tabla1tabla2 WHERE tabla1.campo1 tabla2.campo2
Inserta los resultados que coinciden en la tabla3 y lo que quiero es borrar los datos que fueron conciliados de la tabla1.
No me doy idea de como borrarlos todos juntos... alguna idea ???

Última edición por GatorV; 03/06/2008 a las 15:12
  #2 (permalink)  
Antiguo 03/06/2008, 15:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Borrar datos de una consulta entre dos tablas

Tema trasladado a Bases de Datos.
  #3 (permalink)  
Antiguo 03/06/2008, 15:19
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Borrar datos de una consulta entre dos tablas

haber una pregunta por que tienes recursividad de datos????
o sea ingresas y debes borrar en todo caso es hacer un while dentro de los while....

o sea si ingresas marco en la tabla 3 y ademas en la tabla 2 esta marco que supongo funciona asi tu sistemilla lo elimina de la 3 de lo contrario no hace nada ....

entonce en el select de la tabla 2 buscamos WHERE user = $_POST[user] == marco....
y preguntas por ejemplo con un if de mysql_num_rows si es cero o mayor y borra todo lo que encuentre en 3......

CÓDIGO BORRADO, La razón queda de más explicarla, esta es una sección de BD y no de programación.



ojo : mis codigos es a modo de explicacion no funcionan :P se supone tu ya sabes hacer un select delete insert update ;)
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por BrujoNic; 04/06/2008 a las 21:19
  #4 (permalink)  
Antiguo 04/06/2008, 07:38
Avatar de maxi_lance  
Fecha de Ingreso: julio-2006
Ubicación: Capital Federal
Mensajes: 220
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Borrar datos de una consulta entre dos tablas

gracias kaninox por tu respuesta....

el script que me mandas me orienta bastante , pero en realidad yo tengo que borrar los registros que coincidan del JOIN de tabla1 y tabla2.

Ejemplo:

tabla1
20 registros

tabla2
25 registros

sql JOIN tabla1 y tabla2 : 15 registros. (los inserto en tabla3)

luego de esto tabla1 queda con 5 registros (20 - 15)
y tabla2 con 10 registros (25-15)

espero se haya entendido mejor....
  #5 (permalink)  
Antiguo 04/06/2008, 10:06
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Borrar datos de una consulta entre dos tablas

En sql:

-- Insertar
insert into tabla3
select * from tabla1 join tabla2 on tabla1.campo1 = tabla2.campo2;
-- Borrar (el orden de los deletes dependera de las FKs)
delete from tabla1 where campo1 IN (select campo1 from tabla3);
delete from tabla2 where campo2 IN (select campo2 from tabla3);

Esto te debe valer, claro partiendo de la base de que las FKs son unicas, esto es asi?

Un saludo
  #6 (permalink)  
Antiguo 05/06/2008, 13:17
Avatar de maxi_lance  
Fecha de Ingreso: julio-2006
Ubicación: Capital Federal
Mensajes: 220
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Borrar datos de una consulta entre dos tablas

Con la consulta de abajo, borra aproximadamente 600.000 registros. Pero el proceso se hace muy lento y el servidor queda practicamente inestable. Y no termina de procesar la consulta.

"idATDCliente" es clave primaria. Tendria que ser clave unica ?

Código PHP:
delete from atATDClienteTempMes 
            where idATDCliente IN 
(select idATDCliente from atConciliacionParcial60Prueba
  #7 (permalink)  
Antiguo 06/06/2008, 02:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Borrar datos de una consulta entre dos tablas

una clave primaria ya es una clave unica.

Si son muchos registros IN compara uno a uno, por eso se demora tanto, prueba algo asi:
Código:
delete from atATDClienteTempMes
from (select idATDCliente 
          from atConciliacionParcial60Prueba )  foo
where atATDClienteTempMes.idATDCliente = foo.idATDCliente
Salu2
  #8 (permalink)  
Antiguo 06/06/2008, 10:07
Avatar de maxi_lance  
Fecha de Ingreso: julio-2006
Ubicación: Capital Federal
Mensajes: 220
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Borrar datos de una consulta entre dos tablas

Les dejo la consulta que encontre y voy a utilizar.... gracias !!

Código PHP:
DELETE FROM atATDClienteTempMes USING atATDClienteTempMes,
atConciliacionParcial60Prueba WHERE atATDClienteTempMes.idATDCliente atConciliacionParcial60Prueba.idATDCliente 
pudo borrar los 600.000 registros en 12 min aprox, asi que es lo que estaba buscando

Esta consulta la encontre en el manual de MYSQL
http://dev.mysql.com/doc/refman/5.0/es/delete.html

Última edición por maxi_lance; 06/06/2008 a las 12:43
  #9 (permalink)  
Antiguo 09/06/2008, 03:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Borrar datos de una consulta entre dos tablas

ahhhh fallo mio!

Salu2
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 20:22.