Je peux utiliser CASE
pour choisir les colonnes à afficher dans une SELECT
requête (Postgres), comme ceci:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Est-ce que quelque chose de similaire est possible lors de l'exécution d'une UPDATE
requête dans Postgres (c'est-à-dire choisir les colonnes à mettre à jour)? Je suppose que non, car je n'ai rien trouvé à ce sujet, mais peut-être que quelqu'un a une alternative intelligente (en plus d'utiliser une procédure ou de mettre à jour chaque colonne en utilisant un CASE
pour déterminer si la valeur de la colonne doit être affectée à une nouvelle valeur ou simplement réaffecter l'existant valeur). S'il n'y a pas d'alternative facile, je l'accepterai bien sûr comme réponse également.
Information supplémentaire : dans mon cas, j'ai 14 colonnes potentielles qui peuvent être mises à jour, une seule étant mise à jour par ligne correspondante (le tableau à mettre à jour est joint à un autre dans la requête). Le nombre de lignes à mettre à jour variera très probablement, pourrait être des dizaines ou des centaines. Je pense que des indices sont en place pour les conditions d'adhésion.
la source
Combien de combinaisons différentes de colonnes mettre à jour avez-vous? Combien de lignes de la table entière seront mises à jour? Des index sont-ils en place pour un accès rapide aux lignes à mettre à jour?
En fonction des réponses à ces questions, vous pourrez peut-être exécuter plusieurs instructions de mise à jour, une pour chaque colonne que vous souhaitez mettre à jour et placer la condition sur la valeur de cette colonne dans la clause where de la mise à jour afin que zéro ligne soit mise à jour si cette colonne a la mauvaise valeur.
Essayez de penser basé sur un ensemble, ne supposez pas que la mise à jour doit mettre à jour une seule ligne trouvée par la clé primaire.
la source
la source