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
Libérer: 2024-12-24 12:34:29
original
1076 Les gens l'ont consulté

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);
Copier après la connexion

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
Copier après la connexion

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);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal