Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Consulta de eliminación

228 views
Skip to first unread message

César

unread,
Jan 8, 2009, 11:16:17 AM1/8/09
to
Hola a todos.

Tengo dos tablas: Tabla1 (Con un campo: Código) y Tabla2 (con dos campos:
Código y Venta)

Tengo la siguiente consulta para eliminar registros de Tabla1 que no tengan
ventas en Tabla2:

DELETE Tabla1.Código
FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Código = Tabla2.Código
WHERE Tabla2.Venta Is Null;


Al ejecutar la consulta me sale este error:

‘Especifique la tabla que contiene los registros que desea eliminar. (Error
3128)’

Alguna idea.

Gracias por adelantado.

Saludos. César.

José Mª Fueyo

unread,
Jan 8, 2009, 11:53:10 AM1/8/09
to
Hola César
Prueba con ésto_
DELETE FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Código = Tabla2.Código
WHERE Tabla2.Venta Is Null;

Salu2
--
José Mª Fueyo
[MS MVP Access]

julian-vlc-sp

unread,
Jan 8, 2009, 5:19:13 PM1/8/09
to
===========================================
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias.
===========================================

Ayer en otro foro, di respuesta a algo parecido, una consulta de eliminación
en la que queremos eliminar los no coincidentes entre dos tablas.

La solución que propuse adaptada a este caso, y suponiendo que codigo (sin
acento) es un campo de texto es:

DELETE Tabla1.codigo, DLookUp("codigo","tabla2","codigo = '" & [codigo] &
"'") AS aa
FROM Tabla1
WHERE (((DLookUp("codigo","tabla2","codigo = '" & [codigo] & "'")) Is
Null));

El problema que se me planteaba ayer es que la consulta de selección sale
bien, me determina los registros a borrar, pero al hacerla de eliminación y
querer ejecutarla me dice:

Especifique la tabla que contiene los registros que desea eliminar

Ahora he probado con tu propuesta y no me funciona.

Con la consulta que tu propones al querer ver los registros que selecciona
me dice:

La consulta debe tener como mínimo un campo de destino

Al intentar ejecutarla me dice:

Especifique la tabla que contiene los registros que desea eliminar

¿Me estoy complicando la vida?

¿Nos puedes ayudar?


SALUDOS.
Julián-Valencia-España
http://www.tinyurl.com/julianvalencia


"José Mª Fueyo" <jmf...@NOSPAMya.com> escribió en el mensaje
news:4ED75755-829C-4762...@microsoft.com...

César

unread,
Jan 9, 2009, 3:29:01 AM1/9/09
to
Hola Julian.

Gracias por tu respuesta.

Modificando un pelín tu respuesta (código es numérico) parece que funciona.

DELETE Tabla1.Código AS Expr1, DLookUp("Código","Tabla2","Código ='" &
[Código] ) AS aa
FROM Tabla1
WHERE (((DLookUp("Código","Tabla2","Código = " & [Código])) Is Null));

Saludos. César.
"julian-vlc-sp" escribió:

César

unread,
Jan 9, 2009, 3:46:05 AM1/9/09
to
Hola José.

Gracias por tu respuesta.

Al ejecutar la consulta me devuelve el error que indica Julian 'Especifique
la tabla que contiene los registros que desea eliminar'

Saludos. César.

César

unread,
Jan 9, 2009, 3:48:01 AM1/9/09
to
Hola José.

Gracias por tu respuesta.

Al ejecutar la consulta me devuelve el error que indica Julian 'Especifique
la tabla que contiene los registros que desea eliminar'

Saludos. César.

raipon

unread,
Jan 9, 2009, 11:28:27 AM1/9/09
to
Para eliminar los registros en tabla1, que no tienen correspondencia en
tabla2 :

Delete Tabla1.*
From Tabla1 Left Join Tabla2
On Tabla1.Código = Tabla2.Código
Where Tabla2.Código Is Null;

Adios, un saludo.


raipon

unread,
Jan 9, 2009, 12:13:37 PM1/9/09
to
Comentar también, que la consulta anterior, si la empleas desde el método
Execute del objeto Connection de Ado, te funcionará siempre, pero desde
cualquier otro ámbito, si tienes ambas tablas relacionadas, siendo 'código'
la clave externa, te fallará la eliminación si no tienes activada la
eliminación en cascada.

"raipon" <raimo...@hotmail.com> escribió en el mensaje
news:uIScMdnc...@TK2MSFTNGP02.phx.gbl...

julian-vlc-sp

unread,
Jan 9, 2009, 8:11:06 PM1/9/09
to
===========================================
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias.
===========================================

He probado tu propuestas y me da el siguiente mensaje:

No se puede eliminar nada en las tablas especificadas

Solo lo he logrado como postee anteriormente o son la siguiente consulta

DELETE Tabla1.codigo
FROM Tabla1
WHERE (((Tabla1.codigo) In (SELECT Tabla1.* FROM Tabla1 LEFT JOIN Tabla2 ON
Tabla1.codigo = Tabla2.codigo WHERE (((Tabla2.codigo) Is Null));)));

¿Estoy haciendo algo mal?


SALUDOS.
Julián-Valencia-España
http://www.tinyurl.com/julianvalencia


"raipon" <raimo...@hotmail.com> escribió en el mensaje

news:OldXb2n...@TK2MSFTNGP05.phx.gbl...

raipon

unread,
Jan 10, 2009, 4:28:34 AM1/10/09
to
Hola Julián, creo que no te equivocas :-))

Sucede que habitualmente trabajo en un entorno Ado y este tipo de consultas
siempre las deja realizar, y me confundió ...
Así que resumiendo :
Para eliminar registros en una tabla 'maestra' mediante una consulta que
incluya también la tabla secundaria, debemos sacar dicha tabla de la
clausula From, bién sea con una subconsulta y el operador 'In' (es el método
que utilizas), una función agregada de dominio filtrada (he supuesto que
Código es un campo numérico) :

Delete Tabla1.*
From Tabla1
Where DCount("*", "Tabla2", "Código=" & Código) = 0;

, o mediante el predicado 'Exists', siendo este último el método más rápido
con diferencia :

Delete Tabla1.*
From Tabla1
Where Not Exists
(Select Código From Tabla2 Where Tabla2.Código = Tabla1.Código);

Adios, un saludo.


julian-Vlc-Sp

unread,
Jan 10, 2009, 11:22:00 AM1/10/09
to
Gracias, asi dejo de probar y buscar lo que nunca encontraría.

Yo es que las consultas las hago con diseñador grafico de Access y como
mucho retoco un pelin la SQL o meto la SQL de una consulta dentro de otra
cuando necesito consultas auxiliares.

Gracias de nuevo.

--
SALUDOS.
julian-Valencia-España

http://ijulian.iespana.es
http://www.tinyurl.com/julianvalencia

0 new messages