28 de febrer de 2015

MySQL: Actualitzar una taula a partir d'una selecció sobre la mateixa taula

Treballant amb bases de dades tot sovint ens trobem que cal fer una actualització massiva de dades en una taula. Si la cosa és senzilla, es pot fer amb:
UPDATE LaMevaTaula
SET ElMeuCamp=NouValor
WHERE condició
Evidentment, podem modificar diversos camps, i la condició pot ser més o menys senzilla.

Però, de vegades, la condició pot ser realment complexe i difícil de formular si inclou la mateixa taula i relacions complexes amb d'altes taules. En aquest cas, convé separar la selecció de l'actualització. Això ho podem fer amb dues comandes MySQL, però serà més eficient si ho fem en una de sola:
UPDATE LaMevaTaula
SET ElMeuCamp=NouValor
WHERE id IN 
(
    SELECT T.id FROM (
 SELECT TS.id FROM LaMevaTaula AS TS 
        JOIN unió_complexe_amb_altres_taules
    ) AS T
)
Fixeu-vos com generem els identificadors a actualitzar amb la selecció complexe, i després s'utilitzen aquests per filtrar els registres en l'actualització en massa.

Cap comentari:

Publica un comentari a l'entrada