Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 04/02/2009 13:30:51
- mt
- Membre
UPDATE avec des valeurs au hasard
Bonjour,
Je souhaite "anonymiser" des noms dans une table personne.
Pour ce faire, j'ai constituer une table référence avec 2 colonnes : index et nom. Je voudrais remplacer chaque nom de ma table personne par un nom tiré au hasard de ma table référence.
La requete suivante me ramène le même nom pour toutes les occurences de personne.
UPDATE personne
SET nom_usuel = (SELECT an.nom_usuel FROM ano_nom an
WHERE an.id_nom = mod(cast((floor(random()*100000000)) as bigint) ,8013));
Comment forcer l'exécution du SELECT pour chaque UPDATE ?
(8013, car j'ai 8013 noms dans ma table référence)
Merci d'avance.
Hors ligne
#2 04/02/2009 23:16:50
- gleu
- Administrateur
Re : UPDATE avec des valeurs au hasard
Pour cela, il ne faut pas que ce soit une sous-transaction :
UPDATE personne
SET nom_usuel = an.nom_usuel
FROM ano_nom an
WHERE an.id_nom = mod(cast((floor(random()*100000000)) as bigint) ,8013);
Mais bon, si random veut pas, tu ne pourras pas tout mettre à jour. Peut-être que generate_series serait plus approprié.
Guillaume.
Hors ligne
#3 05/02/2009 10:06:08
- mt
- Membre
Re : UPDATE avec des valeurs au hasard
Non, cela ne marche pas, le WHERE n'a l'air d'être exécuté qu'une seule fois, car au final tous mes enregs ont le même nom. J'avais essayé.
J'ai contourné le problème en externalisant la partie select dans une procédure et en remplaçant par :
UPDATE personne
SET nom_usuel = remplacer_nom();
Cela fonctionne, la fonction est recalculée pour chaque enreg.
Merci quand même.
Hors ligne
Pages : 1