Was ist Los mit meinem update-Anweisung mit einem join in Oracle?

Arbeite ich mit einem Oracle 10g Datenbank.

Habe ich die beiden folgenden Tabellen:

T_DEBTOR :
    - ID_DEBTOR
    - HEADER
T_ELEMENT :
    - ID_ELEMENT
    - ID_DEBTOR
    - INSURER

Diese beiden Tabellen verbunden sind, verwenden Sie die ID_DEBTOR Feld.

Ich soll ein update der T_ELEMENT.VERSICHERER-Wert mit der zugehörigen T_DEBTOR.HEADER, nur wenn HEADER ist nicht null.
In anderen Worten:

If T_DEBTOR.HEADER != null
    Then T_ELEMENT.INSURER = T_DEBTOR.HEADER
    Else T_ELEMENT.INSURER is not modified!

Ich versucht, verwenden Sie die folgende SQL-Abfrage:

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);

Diese Abfrage funktioniert für alle Elemente in Verbindung mit Schuldnern, die eine KOPFZEILE, die nicht null sind.
Allerdings, wenn die T_DEBTOR.HEADER null ist, dann ist diese Abfrage der T_ELEMENT.VERSICHERER auf null, was nicht richtig ist.

ie:

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

Was ist falsch mit meiner Abfrage?

Bearbeiten, über die Brian Storrar Antwort:

Was ich tun möchte ist etwas wie das:

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;

InformationsquelleAutor Romain Linsolas | 2009-06-10

Schreibe einen Kommentar