Maison >base de données >tutoriel mysql >Comment réparer une requête Oracle UPDATE avec JOIN qui s'exécute indéfiniment ?

Comment réparer une requête Oracle UPDATE avec JOIN qui s'exécute indéfiniment ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 12:34:291022parcourir

How to Fix an Oracle UPDATE Query with JOIN That Runs Indefinitely?

Requête de mise à jour Oracle avec jointure

Considérez la requête de mise à jour Oracle suivante :

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL);

Problème :

La requête s'exécute indéfiniment en raison d'une condition manquante qui garantirait le la sous-requête renvoie une seule ligne pour chaque ligne mise à jour dans t1.

Solution :

Pour résoudre le problème, une condition doit être ajoutée à la sous-requête pour corréler les lignes dans t1 avec ceux de la sous-requête. Par exemple, la condition suivante pourrait être utilisée :

AND t1.some_key = t2.some_key

La requête mise à jour résultante ressemblerait à ceci :

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL
    AND t1.some_key = t2.some_key);

Considérations supplémentaires :

  • La modification ci-dessus garantit que la sous-requête renvoie une seule ligne pour chaque ligne t1 qui répond aux exigences ajoutées. condition.
  • S'il n'est pas prévu de mettre à jour chaque ligne de t1, une clause WHERE supplémentaire pourrait être ajoutée à l'instruction UPDATE principale pour spécifier les lignes à mettre à jour.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn