UPDATE à partir d'un SELECT (Oracle)

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 11 juin 2009 à 16:36
EricSQL Messages postés 33 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 24 février 2011 - 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
A voir également:

3 réponses

EricSQL Messages postés 33 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 24 février 2011
20 juin 2009 à 12:45
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
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 juin 2009 à 09:36
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
0
EricSQL Messages postés 33 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 24 février 2011
22 juin 2009 à 20:32
De rien.

Bon courage pour la suite.

/Eric
0
Rejoignez-nous