Bonjour,

Je précise que je travaille sur une base ORACLE.

Pour simplifier, j'ai 2 tables avec les colonnes suivantes :

table T_DEBITEUR :
- ID_DEBITEUR
- HEADER

table T_ELEMENT :
- ID_ELEMENT
- ID_DEBITEUR
- ASSUREUR

Les éléments de la table T_ELEMENT et T_DEBITEUR sont liés par l'ID_DEBITEUR.

Je veux mettre à jour la valeur de T_ELEMENT.ASSUREUR avec la valeur de T_DEBITEUR.HEADER associé seulement si T_DEBITEUR.HEADER n'est pas NULL. Autrement dit :

Si T_DEBITEUR.HEADER != null
alors T_ELEMENT.ASSUREUR = T_DEBITEUR.HEADER
sinon T_ELEMENT.ASSUREUR reste inchangé.

J'ai tenté cette requête :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
update
    T_ELEMENT elt
    set elt.ASSUREUR = (
        select HEADER
            from T_DEBITEUR debiteur
            where
                debiteur.HEADER is not null
                and debiteur.ID_DEBITEUR = elt.ID_DEBITEUR);
Cette requête met bien à jour les élements qui sont liés à un DEBITEUR dont l'HEADER n'est pas NULL.
Par contre, si le DEBITEUR a HEADER = NULL, alors l'ELEMENT associé va voir son champ ASSUREUR passé à NULL, alors que je souhaiterais qu'il soit inchangé.

Autrement dit, ce que fait cette requête :

Si T_DEBITEUR.HEADER != null
alors T_ELEMENT.ASSUREUR = T_DEBITEUR.HEADER (C'est bon)
sinon T_ELEMENT.ASSUREUR = null (PAS BON).


Comment puis-je corriger ma requête pour faire correctement ce que je veux ?