UPDATE à partir d'un SELECT (Oracle) [Résolu]

Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 11 juin 2009 à 16:36 - Dernière réponse : EricSQL 33 Messages postés samedi 11 octobre 2008Date d'inscription 24 février 2011 Dernière intervention
- 22 juin 2009 à 20:32
Bonjour,

J'ai une grosse table à mettre à jours donc je voudrais évité l'opérateur IN (si possible)
J'ai deux table. Les deux contienne les même clef.
Je voudrais mettre à jours une de mes table (passé une colonne à 'V') si l'ID est présent dans la seconde table (à NULL ou autre si non). (Rien de très compliqué en somme)
Sauf que la requete que j'exécute semble tourné en boucle ! (plus de 5 heures d'exécutions sans résultat !!! alors que ma TABLE1 contiens environ 100 000 lignes, ce qui ne me parais pas énorme mais je me trompe peut être vue que j'ai l'abitude de manipulé de TRES grosses tables)
La requete que j'exécute :

update TABLE1 set ("COLONNE3") = (
SELECT
'V' as "COLONNE3"
FROM
TABLE2
WHERE
TABLE1.ID1 = TABLE2.ID1
AND
TABLE1.ID2 = TABLE2.ID2)

Ce que je veut évité (car ma table 2 contienne plus de 1 000 000 000 de ligne) :
update TABLE1 set ("COLONNE3") = ('V')
WHERE
(TABLE1.ID1,TABLE1.ID2) IN (SELECT ID1,ID2 FROM TABLE2)

HELP SVP

 Amicalement
Google écolo : Forestle<!-- /* Style
Afficher la suite 

3 réponses

Répondre au sujet
EricSQL 33 Messages postés samedi 11 octobre 2008Date d'inscription 24 février 2011 Dernière intervention - 20 juin 2009 à 12:45
+3
Utile
Bonjour,
quand tu as beaucoup d'enregistrements à mettre à jour, le mieux est de passer par une table temporaire et d'éviter ainsi un UPDATE très gourmand en ressource.

Create table Nouvelle_Table1 as
Select T1.ID1
, T1.ID2
, Case when T2.ID1 is NULL then NULL else 'V' end as Colonne3
, T1.Toutes_tes_autres_colonnes
from Table1 T1
left outer join Table2 T2
on T1.ID1 = T2.ID1
and T1.ID2 = T2.ID2
;


/Eric
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de EricSQL
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 22 juin 2009 à 09:36
0
Utile
Oui j'ai fini par faire un truc du genre
Merci de t'intéresser à mon problème
(Quoi qu'il en soit, merci pour la requête que tu à posté. Je n'avais plus en tête que le ternaire (Case when TEST then 'Valeur quand vrais' else 'Valeur quand faux' end as "Nom colonne de retour") existais en SQL.
Sa vas me faire gagné du temps pour d'autre requête (je suis à font dedans en ce moment, même si ce n'est pas mon domaine de prédilection)
Bonne continuation

 Amicalement
Google écolo : Forestle<!-- /* Style
Commenter la réponse de Polack77
EricSQL 33 Messages postés samedi 11 octobre 2008Date d'inscription 24 février 2011 Dernière intervention - 22 juin 2009 à 20:32
0
Utile
De rien.

Bon courage pour la suite.

/Eric
Commenter la réponse de EricSQL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.