web-dev-qa-db-fra.com

Mise à jour de plusieurs valeurs à la fois

On m'a donné la tâche de mettre à jour quelques lignes en adatabase. Il y a deux colonnes dans lesquelles on est ID et l'autre est CURRENCY. J'ai mis à jour ces lignes à l'aide des affirmations de mise à jour suivantes:

update account set currency = 'INR' where id =15;
update account set currency = 'EURO' where id =12;
update account set currency = 'DOLLAR' where id =18;
update account set currency = 'Pound' where id =13; 
-- and so on.

En réalité, dans ce cas, j'ai pu le faire facilement en utilisant ces relevés de mise à jour en raison d'un nombre relativement faible de lignes, mais de quoi il y a des milliers ou Lakhs (des centaines de milliers) de rangées? Est-ce le seul moyen de les mettre à jour ou existe-t-il une solution ou un script alternatif?

2

Lorsque vous avez plusieurs milliers de lignes, il est probable que vous les ayez déjà sous forme de tableau, une mise à jour comme celle-ci pourrait être possible:

UPDATE account SET currency = temptable.currency 
FROM temptable WHERE id = temptable.id
2
Twinkles
WITH cte AS (SELECT 'EURO' currency, 12 id UNION ALL
             SELECT 'DOLLAR'       , 18    UNION ALL
             SELECT 'Pound'        , 13    UNION ALL ... )
UPDATE account 
SET currency = (SELECT cte.currency 
                FROM cte
                WHERE account.id = cte.id)

Donc, vous pouvez:

  • faire directement comme ci-dessus
  • compacte les données dans une seule chaîne de format (CSV, JSON) et analysez-la dans CTE en utilisant une fonction appropriée
  • stocker les données dans la table temporaire et l'utiliser dans la mise à jour
0
Akina