Frage

muss ich mit neuen Namen mehr als 20 000 Namen ersetzen i die CodeID gegeben erstellt.

Zum Beispiel: Ich muss alle Zeilen aktualisieren, die „dog“ enthalten mit „cat“ (die eine CodeID von 1 hat), und alle Zeilen aktualisieren, die „Pferd“ (die eine CodeID von 2 hat) mit „Vogel“ enthalten etc.

1. SQL-Anweisung: UPDATE animalTable SET cDescription = "cat" WHERE CodeID = 1

2. SQL-Anweisung: UPDATE animalTable SET cDescription = "Vogel" WHERE CodeID = 2

Diese Aussagen arbeiten, aber ich brauche einen schnelleren Weg, dies zu tun, weil ich mehr als 20 000 Namen haben.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Das ist der schnellste Weg, können Sie es tun.

Oder wollen Sie alle Datensätze in einem einzigen Befehl aktualisieren?

Sie können mit einem Join ein Update tun (Fixed Syntax ... Havent diese in einer Zeit lang verwendet)

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

Eine weitere Möglichkeit ist das Updates in kleinere Chargen aufgeteilt, wird dies die Zeit zu verringern, die Tabelle gesperrt ist ... Aber die Gesamtzeit des Updates wird länger dauern (Es ist nur eine Verbesserung von precieved Performance) Sie können dies tun, indem nur bestimmte ID-Bereiche in jeder Charge zu aktualisieren.

Auch Sie könnten diese Daten in einer separaten Tabelle haben. Da die Daten nicht normalisiert. Verschieben Sie es weg, so seine mehr normalisiert.

Andere Tipps

Sie möchten vielleicht eine temporäre Tabelle erstellen, die die Übersetzungswerte und Aktualisierung hält auf dieser Grundlage.

Zum Beispiel:

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

Dann legen Sie die Übersetzungswerte:

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

Schließlich Update basiert darauf, dass:

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

(Ungeprüfte, aus der Spitze von meinem Kopf).

Sie können eine CASE Anweisung rel="nofollow sie zu aktualisieren

UPDATE animaltable SET cDescription = CASE codeID WENN DANN 1 'Katze', wenn 2 THEN 'Vogel' .... END

Supposind Sie haben eine Datei wie folgt aus:

1,cat
2,bird
...

würde ich ein Skript schreiben, das diese Datei liest und führt ein Update für jede Zeile.

In 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);

Was Sie tun können, um ihn zu beschleunigen wird, um nur die Datensätze zu aktualisieren, die nicht bereits den Wert haben Sie zuweisen möchten.

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

Dieser Ansatz macht nur den Befehl, diese Datensätze aktualisieren, die nicht bereits ‚Katze‘ sind.

Disclaimer: Ich hasse Katzen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top