2010-11-18 8 views
1

J'ai une table comme:enregistrement en cours de référence SQL (« this ») dans la requête

id | NODE_ID | last_updated 
1 | 4  | 11-29-2010 ... 

où la colonne LAST_UPDATED est mis à jour après toute modification de la ligne à l'aide « sur la mise à jour CURRENT_TIMESTAMP »

J'ai besoin de mettre à jour tous les enregistrements avec un NODE_ID de 4 à 5, mais je veux laisser l'horodateur inchangé.

Je pense à faire une mise à jour et faire référence à la ligne sélectionnée dans la requête pour définir manuellement l'horodatage ... confusion ... comme ce travail de mise à jour

mis NODE_ID = 4, LAST_UPDATED = cela. last_updated où NODE_ID = 5;

Que puis-je utiliser pour remplacer le "this" dans la requête? Si je ne peux pas, alors quelle est la meilleure façon de faire ce genre de chose?

~ Sean

PS. mysql Ver 14,12 Distrib 5.0.86, pour redhat-linux-gnu (i686) en utilisant readline 5.1

Répondre

2

Cela devrait le faire:

update jobs set NODE_ID=4, last_updated = last_updated where NODE_ID = 5; 

ETA: Au départ, je ne pensais pas que cela fonctionnerait car je pensais la contrainte on update sera exécutée après avoir défini la valeur, en effaçant votre "modification" (ou son absence). Mais this me conduit à croire que ce n'est pas le cas.

+0

Donc je suppose qu'il y a une référence inhérente à "cet" enregistrement dans la requête. Cela aurait dû être évident puisque vous vous référez toujours au même enregistrement (actuel) dans les clauses "where". Merci a tous! –

1

S'il s'agit d'une mise à jour unique, vous pouvez supprimer la contrainte avant de l'exécuter, puis l'ajouter lorsque vous avez terminé. Voir here. Je ne pense pas que ce que vous voulez faire fonctionnera car Mysql peut toucher l'horodatage après l'évaluation de la requête.

Questions connexes