SQL de mise à Jour de colonne avec des données provenant d'une autre table

J'ai 2 tableaux ci-dessous

DEVICES
--------------------
DEVICE_ID   MODEL_ID
1           A
2           B
3           C
4           D


CHANGE_VALUES
----------------------------------------
D_ID    CHANGE_MODEL_ID
1           E
4           F

Maintenant, je voudrais mettre à jour la valeur de MODEL_ID dans DEVICES table pour tous les DEVICE_ID avoir des valeurs inscrites dans D_ID dans le tableau CHANGE_VALUES.

La requête SQL que j'ai utilisé pour réaliser l'objectif est montré ci-dessous. Cependant, il ne semble pas être une bonne solution, car pour chaque valeur de DEVICE_ID , il est nécessaire d'effectuer 2 sous-requêtes. L'exécution de ce sur CHANGE_VALUES contenant ~ 3k lignes m'a pris 34 secondes, ce qui semble être long.

UPDATE devices dev
SET dev.model_id =
   (SELECT c_value.change_model_id
    FROM change_values c_value
    WHERE dev.device_id = c_value.d_id
   )
WHERE 1        IN
  (SELECT COUNT(*)
  FROM change_values c_value
  WHERE dev.device_id = c_value.d_id
  );

Comme je suis nouveau sur le SQL, je ne sais pas si il existe une manière qui peut faire la même chose. Donc, je suis curieux de savoir si est-il de meilleures solutions.

Note: je suis sous Oracle 10g

OriginalL'auteur Phuong Luu Hoang | 2013-03-14