A veces podemos encontrarnos con situaciones donde necesitamos borrar algunas filas pero la condición de borrado depende de otra tabla.

Por ejemplo en una institución educativa tenemos dos tablas: ALUMNOS e INSCRIPCIONES. Evidentemente el alumno no puede inscribirse antes de nacer. Si lo tenemos inscripto antes de su fecha de nacimiento eso es un error y debemos borrarlo de la tabla de INSCRIPCIONES o en todo caso modificar la fecha de la inscripción o del nacimiento.

Lo mismo ocurriría en el caso de ventas y cobranzas. Primero se hace la venta y después la cobranza, sería muy raro el caso inverso.

Lo correcto es que siempre cuando de borrar se trata lo hagamos tomando en cuenta los identificadores de las tablas porque así disminuye mucho la probabilidad de equivocarnos y borrar filas que no deberían ser borradas.

Pero en situaciones como las antedichas, en que por un error de programación se permitió inscribir a un alumno antes de que naciera o se realizó una cobranza antes de una venta, podríamos necesitar borrar esas filas erróneas.

Una posible solución es la siguiente:

DELETE FROM
   INSCRIPCIONES I
WHERE
   I.INS_FECHAX < (SELECT A.ALU_FECNAC FROM ALUMNOS A WHERE I.INS_IDEALU = A.ALU_IDENTI)

En este caso borramos de la tabla de INSCRIPCIONES todas las filas donde la fecha de inscripción sea menor que la fecha de nacimiento del respectivo alumno.

INS_FECHAX es la fecha de la inscripción

ALU_FECNAC es la fecha de nacimiento del alumno

INS_IDEALU es el identificador del alumno en la tabla de INSCRIPCIONES

ALU_IDENTI es el identificador del alumno en la tabla de ALUMNOS

Artículo relacionado:

El índice del blog Firebird21

Anuncios