Qué tiene de malo mi declaración de actualización con una unión en Oracle?
Estoy trabajando con unOrácul 10g Base de datos.
Tengo las siguientes dos tablas:
T_DEBTOR :
- ID_DEBTOR
- HEADER
T_ELEMENT :
- ID_ELEMENT
- ID_DEBTOR
- INSURER
Estas dos tablas se unen utilizando el campo ID_DEBTOR.
Quiero actualizar el valor T_ELEMENT.INSURER con el T_DEBTOR.HEADER asociado solo si HEADER no es nulo. En otras palabras
If T_DEBTOR.HEADER != null
Then T_ELEMENT.INSURER = T_DEBTOR.HEADER
Else T_ELEMENT.INSURER is not modified!
Intenté usar la siguiente consulta SQL:
update
T_ELEMENT elt
set elt.INSURER = (
select HEADER
from T_DEBTOR debtor
where
debtor.HEADER is not null
and debtor.ID_DEBTOR = elt.ID_DEBTOR);
Esta consulta funciona para todos los elementos vinculados a deudores que tienen un HEADER no nulo. Sin embargo, cuando T_DEBTOR.HEADER es nulo, esta consulta establece T_ELEMENT.INSURER en nulo, lo que no es correcto.
es decir
If T_DEBTOR.HEADER != null
Then T_ELEMENT.INSURER = T_DEBTOR.HEADER --> This part is OK
Else T_ELEMENT.INSURER is set to null --> This part is NOT OK
¿Qué tiene de malo mi consulta?
Edit, con respecto a la respuesta de Brian Storrar:
Lo que quiero hacer es algo así:
update
T_ELEMENT elt
set elt.INSURER = (
select HEADER
from T_DEBTOR debtor
where
debtor.HEADER is not null
and debtor.ID_DEBTOR = elt.ID_DEBTOR)
where debtor.HEADER is not null;