Access - Eliminar coincidentes en dos tablas

   
Vista:

Eliminar coincidentes en dos tablas

Publicado por Jorge (3 intervenciones) el 29/04/2014 15:09:47
Buenas tardes.

Tengo un problemilla al crear consulta SQL como consulta de eliminación de datos de una tabla. Me explico:
Tengo dos tablas (tabla1 y tabla2) y necesito crear una consulta que elimine las filas de la tabla1 que esten en la tabla2.
Mi problema es que en la tabla1 tengo 9 columnas y en la tabla2 solo 5 aunque esas coinciden con las 5 primeras de la tabla1.
Intentar crear la consulta mediante un diseño de consulta es imposible por lo que he estado buscando por internet y he encontrado la forma de hacerlo pero igualando 1 solo campo, yo necesito igualar 5 campos.

DELETE tabla1.*, tabla1.campo1, tabla1.campo2, tabla1.campo3, tabla1.campo4, tabla1.campo5
FROM tabla1;
WHERE ((( tabla1.campo1, tabla1.campo2, tabla1.campo3, tabla1.campo4, tabla1.campo5) In (SELECT DISTINCT tabla2.campo1, tabla2.campo2, tabla2.campo3, tabla2.campo4, tabla2.campo5)))";

Otra forma que he intentado es:
DELETE Tabla1.campo1, Tabla1.campo2, Tabla1.campo3, Tabla1.campo4, Tabla1.campo5, Tabla1.campo6, Tabla1.campo7, Tabla1.campo8, Tabla1.campo9, Tabla1.campo10, Tabla2.campo1, Tabla2.campo2, Tabla2.campo3, Tabla2.campo4, Tabla2.campo5
FROM Tabla1 INNER JOIN Tabla2 ON (Tabla1.campo5 = Tabla2.campo5) AND (Tabla1.campo4 = Tabla2.campo4) AND (Tabla1.campo3 = Tabla2.campo3) AND (Tabla1.campo2 = Tabla2.campo2) AND (Tabla1.campo1 = Tabla2.campo1)
WHERE (((Tabla2.campo1) Is Null) AND ((Tabla2.campo2) Is Null) AND ((Tabla2.campo3) Is Null) AND ((Tabla2.campo4) Is Null) AND ((Tabla2.campo5) Is Null));


¿A alguien se le ocurre alguna forma de solucionar mi problema?

Muchas gracias.
Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Eliminar coincidentes en dos tablas

Publicado por Martha (156 intervenciones) el 29/04/2014 15:47:20
Si los cinco campos de una tabla, coinciden con cinco campos de la otra, lo único que tienes que hacer es un índice común.
Supongamos que el orden de los campos es el mismo.
Añade un campo que llames indice a cada tabla.
Con una consulta de actualización haces: Index: Campo1&Campo2&...&Campo5
Eso en las dos tablas.
Luego puedes hacer una consulta de eliminación haciendo uso de ese índice.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar coincidentes en dos tablas

Publicado por Jorge (3 intervenciones) el 29/04/2014 16:47:52
Lo primero es que muchas gracias Martha por tu ayuda.
Comentar que no tengo la opción de modificar la tabla1, la estructura, orden y parametros de los datos son fijos ya que desde otra aplicacion hace uso de esa tabla. Por este motivo queria que la consulta hiciera una comparación campo a campo y si coincidiera eliminara el registro.
En estos momentos lo que hice como alternativa es meter los datos de la tabla2 en un recordset e ir linea a linea lanzando una consulta de eliminación sencilla contra la tabla1. El problema de esto es la lentitud al recorrer el recordset y lanzar la consulta ya que la mencionada aplicación detiene sus procesos al no tener dominio completo en la base de datos.

¿Se te ocurre alguna alternativa más rapida? Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique Ramírez

Eliminar coincidentes en dos tablas

Publicado por Enrique Ramírez (617 intervenciones) el 29/04/2014 18:47:31
Claro que se puede hacer, te hice este ejemplo:

Entra a mi sitio
https://sites.google.com/site/jerrmex/descargas

BUSCA la opción 103_Eliminar coincidentes

checalo y comentas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique Ramírez

Eliminar coincidentes en dos tablas

Publicado por Enrique Ramírez (617 intervenciones) el 30/04/2014 01:30:19
En el ejercicio este es el ejemplo de los registros coincidentes que se van a eliminar en Tabla1


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar coincidentes en dos tablas

Publicado por Jorge (3 intervenciones) el 30/04/2014 09:28:55
Buenos días,

Lo he trasladado a mi BBDD pero no me funciona, si consultas si aparecen los datos que tiene que eliminar pero cuando la ejecutas dice que no se puede eliminar datos de la tabla seleccionada. Por otro lado, se me ha ocurrido otra manera que es más lenta que con una sola consulta pero muchísimo más rápida que la forma que la tengo a día de hoy.
Puesto que el problema es que no elimina los datos pero si sabe cuáles son lo que hice fue crear una consulta de actualización y modificar uno de los campos con un valor imposible y después genero otra consulta de eliminación de todo el registro en el que el campo1 tenga ese valor.
Continuaré trasteando a ver si consigo (ya por curiosidad y ampliar conocimientos) pero por lo menos no me urge.
Muchas gracias por todo

Me ha gustado mucho la página que me pusiste por lo que le voy a dar una vuelta detenidamente que hay cosas muy interesantes.


Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique Ramírez

Eliminar coincidentes en dos tablas

Publicado por Enrique Ramírez (617 intervenciones) el 30/04/2014 17:21:45
Casi siempre que se ejecuta una consulta de eliminación utilizando más de una tabla puede aparecer el siguiente mensaje de error:

"No se pudo eliminar nada en las tablas especificadas"

Cuando se muestra el mensaje anterior si eres curioso y le das clic al botón ayuda esta te dice que la base de datos esta como de solo lectura, pero en si no es la base, son las tablas las que se toman el atributo de solo lectura.

Esto es porque la consulta de eliminación tiene por default la propiedad Registros únicos en No,

Para solucionar esto en la consulta hay que establecer la propiedad Registros únicos en Sí.

1. abre la consulta de eliminación.
2. En el menú Ver , da clic en Propiedades.
3. Cambia la propiedad Registros únicos en Sí.
4. Guarda la consulta y ejecutala.

Cambia la propiedad en la consulta y veras que la consulta elimina los registros, de hecho ve las propiedades de mi ejemplo y veras que esta en SI.

Toma esto como base cada que hagas consultas de eliminación con más de una tabla, Prueba y comentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar coincidentes en dos tablas

Publicado por JAVIER DIZ (2 intervenciones) el 06/07/2016 15:44:38
He probado como indicas, incluso me he bajado tu ejemplo y me sale el mensaje de error de "Especifique la tabla que contiene los registros que desea elminar"

Que puedo hacer?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar coincidentes en dos tablas

Publicado por Alberto (4 intervenciones) el 26/07/2016 00:37:15
en la hoja de propiedades en donde dice "Registros Únicos" cámbiale a SI.
Y listo.

en SQL; DELETE DISTINCTROW
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar