Borrar datos de una Tabla si no tiene registros en otra Tabla

Dispongo de dos tablas CABECERAVENTAS y LINEASVENTAS.

Necesito eliminar de la Tabla: (CABECERAVENTAS) los registros que NO tienen ningún registro en la tabla Líneas Ventas (LINEASVENTAS)

Se trata de realizar un borrado general de pedidos que no tengas ninguna venta y solo estén las cabeceras del Pedido.

3 Respuestas

Respuesta
2

José: De modo artesenal, con el asistente, te creas una consulta de No coincidente de CabeceraVentas con LineasVentas y después otra de eliminar esos registros.

Prueba en una copia, por si no acierto con ésta sql al Cien por %.

Dim StrSQL As String

StrSQL = "DELETE CabeceraVentas.IDFACTURA
FROM CabeceraVentas
WHERE (((CabeceraVentas.IDFACTURA) In (SELECT CabeceraVentas.IdFactura FROM CabeceraVentas LEFT JOIN LineasVentas ON CabeceraVentas.IdFactura = LineasVentas.IdFactura WHERE (((LineasVentas.IdFactura) Is Null));)));"

Currentdb. Execute StrSQL, dbFailOnError

Si no te sale bien me comentas e intento afinar un poco más. Saludos >> Jacinto

Respuesta
2

Tienes otra forma de construir la SQL para el borrado, a mi entender algo más sencilla que la que propone Jacinto (que no dudo que también funcione, jejeje):

DELETE * FROM CABECERAVENTAS WHERE Campo1 NOT IN (SELECT Campo2 FROM LINEASVENTAS)

Donde Campo1 será el identificador único de la tabla cabeceraventas (que además estará relacionado con Lineasventas) y campo2 el campo de lineasventas que recoge el campo de la cabecera.

Ya comentarás si te sale.

Me marca en rojo toda la línea, posicionando el cursor sobre el * que hay después del DELETE y me da este error:

No sé que habrás hecho (porque no lo dices), pero mi respuesta era para que cambiaras las SQL del código de Jacinto por la mía, para que al final te quede una cosa así:

CurrentDb. Execute "DELETE * FROM CABECERAVENTAS WHERE Campo1 NOT IN (SELECT Campo2 FROM LINEASVENTAS)"

Respuesta
1

Prueba con esto:

Algo es el campo común entre las 2 tablas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas