Pregunta

Necesito reemplazar más de 20 000 nombres con nuevos nombres que creé dado el CodeID.

Por ejemplo: debo actualizar todas las filas que contienen " dog " (que tiene un CodeID de 1) con '' cat '' y actualizar todas las filas que contienen '' horse '' (que tiene un CodeID de 2) con " bird " ;, etc.

Primera instrucción SQL: ACTUALIZAR animalTable SET cDescription = " cat " DONDE CodeID = 1

Segunda instrucción SQL: ACTUALIZAR animalTable SET cDescription = " bird " DONDE CodeID = 2

Estas declaraciones funcionan, pero necesito una forma más rápida de hacerlo porque tengo más de 20 000 nombres.

Gracias de antemano.

¿Fue útil?

Solución

Esa es la forma más rápida de hacerlo.

¿O desea actualizar todos los registros en un solo comando?

puede hacer una actualización con una unión (Sintaxis fija ... no he usado esta en un momento)

UPDATE animalTable 
INNER JOIN CodeTable ON animalTable.CodeID = CodeTable.ID 
SET animalTable.cDescription = CodeTable.Description_1;

Otra opción es dividir las actualizaciones en lotes más pequeños, esto reducirá el tiempo en que la tabla está bloqueada ... Pero el tiempo total de las actualizaciones tomará más tiempo (es solo una mejora del rendimiento prevenido). actualizar solo ciertos rangos de ID en cada lote.

También podría tener esos datos en una tabla separada. Dado que los datos no están normalizados. Alejarlo para que sea más normalizado.

Otros consejos

Es posible que desee crear una tabla temporal que contenga los valores de traducción y la actualización basada en eso.

Por ejemplo:

create table #TRANSLATIONS
(
    from   varchar(32),
    to     varchar(32)
)

Luego, inserte los valores de traducción:

insert into #TRANSLATIONS (from,to) values ('cat','dog')

Finalmente, actualice basado en eso:

update MYTABLE
set    myvalue = t.to
where  myvalue = t.from
from   MYTABLE m,
       #TRANSLATIONS t

(Sin probar, fuera de mi cabeza).

Puede utilizar una CASE para actualizarlo

ACTUALIZAR animaltable SET cDescription = CASE codeID CUANDO 1 ENTONCES 'gato' CUANDO 2 ENTONCES 'pájaro' .... FIN

Supongamos que tiene un archivo como este:

1,cat
2,bird
...

Escribiría un script que lea ese archivo y ejecute una actualización para cada fila.

En PHP:

$f = fopen("file.csv","r")
while($row = fgetcsv($f, 1024)) {
    $sql = "update animalTable set cDescription = '".$row[1]."' where CodeID = ".$row[0];
    mysql_query($sql);
}
fclose($f);

Lo que podría hacer para acelerarlo es actualizar solo aquellos registros que aún no tienen el valor que desea asignar.

UPDATE animalTable SET cDescription = "cat" WHERE CodeID = 1 AND cDescription != "cat"

Este enfoque hace que el comando solo actualice aquellos registros que aún no son 'cat'.

Descargo de responsabilidad: odio los gatos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top