2011-10-24 1 views
0

J'ai une table appelée _field. Maintenant, pour une raison quelconque, un champ à l'intérieur de la table, appelé block, est en désordre et contient maintenant les mauvais numéros de bloc. J'ai les données par défaut pour _field, mais certains des autres champs ne peuvent plus être en défaut à cause de contraintes étrangères et autres, donc, je ne peux pas simplement restaurer les données par défaut. Donc, pour l'instant, j'ai créé une nouvelle table appelée tmp_field et rempli avec les données _field par défaut.J'ai besoin de mettre à jour un champ id pour une table, sans toucher d'autres champs

Maintenant, je besoin d'une requête qui prend les données de _field et change tous les chiffres dans block_field pour correspondre aux numéros de blocktmp_field.

Une autre façon de l'exprimer serait:
Il vérifie chaque ligne de _field et si un champ (comme fieldid ou name) correspond au même champ tmp_field, il modifie la valeur du bloc _field pour correspondre à la valeur de bloc dans tmp_field.

Note: J'utilise Postgresql 9.1.

Merci pour tout.

Répondre

2
UPDATE _field 
    SET block = tmp_field.block 
    FROM tmp_field 
    WHERE _field.fieldid = tmp_field.fieldid 
     OR _field.name = tmp_field.name 
+0

Oh, merci, surtout pour la réponse rapide. J'ai essayé quelque chose de similaire, mais cela n'a pas fonctionné parce que je ne connaissais pas la clause 'FROM'. En outre, 'fieldid' doit être' _field.fieldid', la même chose avec 'name', mais oui, cela fonctionne. Merci beaucoup. – zermy

+0

@zermy: Mise à jour de la réponse par commentaire. –

Questions connexes