He recibido varias consultas vía mail preguntando sobre esta posibilidad, la de hacer el borrado de una tabla filtrando los registros a borrar a partir del valor de un campo de otra tabla que "joinearemos" con la tabla base.
La respuesta es si! Claro que si, simplemente les dejo un ejemplo que es de por si explicativo y como siempre me pongo a disposición de Uds. para cualquier duda o consulta.
-- Delete With Inner T-Sql --
-- Se escribe el
delete from la tabla en la que se quiera borrar
Delete
From
HumanResources.Employee
-- Se construye
el Join que permitirá utilizar en el where el campo que usaremos como condición
para borrar
From
HumanResources.Employee
inner join HumanResources.EmployeeAddress
on
HumanResources.Employee.EmployeeID
= HumanResources.EmployeeAddress.EmployeeID
-- En el where
se filtran los registros a borrar haciendo referencia a un campo de la tabla
joineada
where
HumanResources.EmployeeAddress.EmployeeID = 11
Saludos, Gustavo Herrera
muchas gracias estuvo muy bueno, gracias de verdad bendiciones
ResponderEliminarmuy bueno el post. Pero que tanto afecta el tiempo de respuesta de una sentencia. Ejemplo DELETE TABLA1 T1 WITH (ROWLOCK) FROM TABLA1 INNNER JOIN TABLA2 T2 WITH (NOLOCK) ON T1.LLAVE = T2.LLAVE ?? GRACIAS
ResponderEliminarBuen dia. Este tipo de operaciones (delete) suelen ser costosas en tablas con gran cantidad de datos. Ahora bien, el delete con join tiene el aditamento de el link con otras tablas. Yo te sugiero que hagas los idx que sean necesarios para que los joins y la query en general tengan un buen plan de ejecución. También es aconsejable hacer un select y estudiar tiempos de respuesta y plan de ejecución antes de usar el delete. Sdos.
ResponderEliminarMuchas gracias Jose Luis!
ResponderEliminarNecesito borrar registros en tablas padres e hijas
ResponderEliminar