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

Eliminar registros considerando dos tablas

Estas en el tema de Eliminar registros considerando dos tablas en el foro de Bases de Datos General en Foros del Web. Hola, necesito eliminar registros de una base de datos, pero con la siguiente condición: Tengo dos tablas: En la tabla 1 hay un campo que ...
  #1 (permalink)  
Antiguo 27/05/2005, 03:30
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Eliminar registros considerando dos tablas

Hola, necesito eliminar registros de una base de datos, pero con la siguiente condición:

Tengo dos tablas:

En la tabla 1 hay un campo que se llama "MARCA"
En la tabla 2 hay un campo que se llama "MARCA"

Necesito eliminar todos los registros de la tabla 2 donde el campo ""MARCA" no coincida con el campo "MARCA" de la tabla 1

Estoy atorado, gracias a quien me ayude!!
  #2 (permalink)  
Antiguo 27/05/2005, 05:03
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Prueba esto:
Código:
delete tabla2.* from tabla1, tabla2
where tabla1.id=tabla2.id and tabla1.marca<> tabla2.marca
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 27/05/2005, 09:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Hola Vice, gracias por tu mensaje.

Hay una cosa que no entiendo, en la sentencia SQL que me sugieres pones:

tabla1.id=tabla2.id

pero en ambas tablas el único campo común que tienen es el de MARCA, ninguna tiene un campo llamado "id"
  #4 (permalink)  
Antiguo 28/05/2005, 18:07
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Lo he probado pero no funciona ¿?
  #5 (permalink)  
Antiguo 30/05/2005, 06:42
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Cuando pongo el campo id (me lo he inventado, pues no tengo la estructura de las tablas) me refiero al campo (o campos) que establecen la relación entre las dos tablas.
He supuesto que existe tal relación, sino no le encuentro mucho sentido a lo que preguntas.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #6 (permalink)  
Antiguo 30/05/2005, 09:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Hola de nuevo, el campo que tienen en común es "marca", he probado con:

delete tabla2.* from tabla1, tabla2
where tabla1.marca<> tabla2.marca

Entiendo que con esto debería de funcionar, pero me elimina todos los registros ¿?

Lo que quiero es eliminar registros que ya no me sirven de nada, puesto que hay categorias que han desaparecido, pero en la tabla2 todavías estan los registros que pertenecian a estas categorias. Entonces lo que quiero es eliminar todos los registros en los que el campo "marca" de la tabla2 ya no se encuentre presente en la tabla1

Gracias de nuevo
  #7 (permalink)  
Antiguo 30/05/2005, 09:51
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
hola no se en que bd trabajes asi qeu no se si soporta subconsultas pero podrias intentar esto
Código:
delete from tabla2 where marca not in(select marca from tabla 1)
  #8 (permalink)  
Antiguo 30/05/2005, 10:06
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Problema, trabajo en Mysql y no acepta subconsultas....

Se complica la cosa?
  #9 (permalink)  
Antiguo 30/05/2005, 10:30
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
ps no se me ocurre como hacerlo con pura asentencia sql, lo unico que se me ocurre es hacer una miniaplicacion, que seleccione las marcas de la tabla1 y als guarde en una variable luego haga el delete con "marca not in (variable)"
  #10 (permalink)  
Antiguo 30/05/2005, 13:14
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Muchas gracias Dark al final lo he conseguido, haciendo un select de la tabla 2 y recorriendo el recordset uno a uno mientras iba eliminando los registros de la tabla2. Lo he ejecutado en local y luego he subido la tabla al server.

Gracias de nuevo por tu ayuda!!
  #11 (permalink)  
Antiguo 30/05/2005, 14:11
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 19 años, 6 meses
Puntos: 0
Un consejillo:

Yo cambiaría de versión del MySQL. Un SGBD sin subconsultas es como un día sin pan.

Un saludo
  #12 (permalink)  
Antiguo 30/05/2005, 14:53
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
pues si, pero creo que las subconsultas las implementa el mySql hasta la version 5 no? y aun esta en beta, o eso creo
  #13 (permalink)  
Antiguo 30/05/2005, 15:37
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
la verdad no entiendo muy bien que es lo que queres hacer... pero suponiendo que en la tabla 1 hay mas de un valor MARCA para borrar los campos de la tabla 2 donde MARCA es diferente a MARCA de la tabla 1 tenes que conocer el valor de tabla1.MARCA si o si (que trabalenguas ). Y de ser asi porque no poner simplemente "DELETE * FROM tabla2 WHERE marca!=elvalorquequieras".
__________________
oohh... quisiera ser godines!!!
  #14 (permalink)  
Antiguo 30/05/2005, 15:48
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
las subconsultas estan disponibles a partir de mysql 4.1 creo
  #15 (permalink)  
Antiguo 30/05/2005, 22:26
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
si heh tienes razon, es apartir de la 4.1
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 10:14.