Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
11 juin 2009 à 16:36
EricSQL
Messages postés33Date d'inscriptionsamedi 11 octobre 2008StatutMembreDernière intervention24 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)
EricSQL
Messages postés33Date d'inscriptionsamedi 11 octobre 2008StatutMembreDernière intervention24 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
;
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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