Vous n'êtes pas identifié(e).
Pages : 1
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
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
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