Vous n'êtes pas identifié(e).

#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

Pied de page des forums