Buscar este blog

miércoles, 11 de diciembre de 2013

DELETE CON JOIN (inner - left - right)

Amigos,

    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

5 comentarios:

  1. muchas gracias estuvo muy bueno, gracias de verdad bendiciones

    ResponderEliminar
  2. muy 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

    ResponderEliminar
  3. Buen 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.

    ResponderEliminar
  4. Necesito borrar registros en tablas padres e hijas

    ResponderEliminar