PDA

Ver la Versión Completa : Usar DELETE relacionando 2 tablas


Rakelina
21-05-2004, 21:13:24
Hola a todos!!!. He estado mirando los foros y he encontrado como usar delete para borrar registros pero de la misma tabla. Lo que necesito es borrar una tupla pero relacionando dos tablas. Por ejemplo tengo estas tablas

Pedidos Facturas
--------- -----------
IDpedido IDfactura
IDfactura Tipo_factura

lo que querria es borrar los pedidos facilitando el Tipo de factura
He intentado algo asi:

DELETE
FROM Pedidos,Facturas
WHERE Tipo_factura=:ID AND Facturas.IDfactura=Pedidos.IDfactura

Pero esto no funciona.
Alguien tiene una idea o me puede ayudar???.


Muchas gracias a todos.

delphi.com.ar
21-05-2004, 21:17:20
El delete que pides va a elimiar reguistros de una sola tabla, pero cuando exista una relación con la otra. Esto lo puedes solucionar con la sentencia IN o EXISTS:
DELETE FROM FACTURAS
WHERE TIPO_FACTURA = :ID
AND EXISTS (SELECT 1 FROM PEDIDOS WHERE FACTURAS.ID = PEDIDOS.ID)

(no se si precisamente quieres que haga lo que hace esta consulta pero esa es la idea)
Saludos!

delphi.com.ar
21-05-2004, 21:18:47
lo que querria es borrar los pedidos facilitando el Tipo de factura
Me perdí ese detalle! :D

Bueno, la consulta evidentemente es al revés, pero creo que con ese ejemplo puedes resolverlo.

hermes_32
21-05-2004, 21:45:50
DELETE
FROM Pedidos
WHERE Tipo_factura=:ID
AND Facturas.IDfactura = (SELECT IDfactura FROM Facturas)


Creo que te valdra.

jachguate
22-05-2004, 03:59:35
Lo siento hermes, pero esto borraria todos los pedidos para los que exista al menos una factura, no???. Ademas en lugar del = debiera tener el operador in, de lo contrario, al existir mas de una factura en la tabla, la sentencia tendria que devolver un error, puesto que no se puede aplicar el = a un conjunto de registros.

Yo creo que con lo ya aportado por delphi.com.ar debiera estar en capacidad de resolverlo.

Hasta luego.

;)

Rakelina
22-05-2004, 16:01:57
Hola!!!!!!
Gracias a todos por la rapidas respuestas, ire probando lo que me habeis dicho a ver que ocurre.
Saluditos.
Rachel