[Update-Syntax] ???
am 27.08.2006 20:36:28 von Thomas Enzinger
Hallo,
ich komme bei einen Problem nicht mehr weiter. Meine Erfahrungen mit dem
SQL-Syntax sind nicht gerade die besten und bitte daher hier um eure
Mithilfe. Hier einmal eine kleine Beschreibung:
Tabelle Name="Test" Engine="InnoDB"
- ID varchar(64)
- Name varchar(255)
- Wert varchar(255)
Daten:
ID : Name : Wert
f4 : abcd : a auf den Wert "aa" akt.
f4 : jjkk : z
f4 : zzz : xl auf den Wert "xxll" akt.
ee : abcd : e
ee : jjkk : d
ee : zzz : zxy
Nun möchte ich ein paar Daten aktuallisieren. Um Ressourcen zu sparen möchte
ich mehrere Zeilen (nur gleiche ID) auf einmal akt.. Kann man hierzu den
update-Syntax verwenden?
UPDATE test SET ???? WHERE ID="f4"
Wenn ja, was kommt muss ich bei den Fragenzeichen hinzufügen. Oder muss ich
einen anderen Syntax verwenden?
MFG,
Thomas
Re: [Update-Syntax] ???
am 27.08.2006 21:03:03 von Dirk Brosowski
Thomas Enzinger schrieb:
> Hallo,
>
> ich komme bei einen Problem nicht mehr weiter. Meine Erfahrungen mit dem
> SQL-Syntax sind nicht gerade die besten und bitte daher hier um eure
> Mithilfe. Hier einmal eine kleine Beschreibung:
>
> Tabelle Name="Test" Engine="InnoDB"
> - ID varchar(64)
> - Name varchar(255)
> - Wert varchar(255)
>
> Daten:
> ID : Name : Wert
> f4 : abcd : a auf den Wert "aa" akt.
> f4 : jjkk : z
> f4 : zzz : xl auf den Wert "xxll" akt.
> ee : abcd : e
> ee : jjkk : d
> ee : zzz : zxy
>
> Nun möchte ich ein paar Daten aktuallisieren. Um Ressourcen zu sparen möchte
> ich mehrere Zeilen (nur gleiche ID) auf einmal akt.. Kann man hierzu den
> update-Syntax verwenden?
>
> UPDATE test SET ???? WHERE ID="f4"
>
> Wenn ja, was kommt muss ich bei den Fragenzeichen hinzufügen. Oder muss ich
> einen anderen Syntax verwenden?
Das geht nicht mit einem Befehl. Du musst schon ein
UPDATE test SET wert='aa' WHERE id=f4 and name='abcd';
machen.
Im übrigen sollte man so ein Feld nicht ID nennen, weil es in deinem
Fall kein Identificator ist.
Zur Update-Syntax und zu allen Funktionen (vielleicht kann man da sogar
etwas grausames basteln) ... www.mysql.com
Grüße
Dirk
Re: [Update-Syntax] ???
am 27.08.2006 21:22:13 von dnoeth
Thomas Enzinger wrote:
> Daten:
> ID : Name : Wert
> f4 : abcd : a auf den Wert "aa" akt.
> f4 : jjkk : z
> f4 : zzz : xl auf den Wert "xxll" akt.
> ee : abcd : e
> ee : jjkk : d
> ee : zzz : zxy
>
> Nun möchte ich ein paar Daten aktuallisieren. Um Ressourcen zu sparen möchte
> ich mehrere Zeilen (nur gleiche ID) auf einmal akt.. Kann man hierzu den
> update-Syntax verwenden?
>
> UPDATE test SET ???? WHERE ID="f4"
>
> Wenn ja, was kommt muss ich bei den Fragenzeichen hinzufügen.
wert = case name
when 'abcd' then 'aa'
when 'zzz' then 'xxll'
else wert
end
Übrigens heisst es "die" Syntax :-)
Dieter
Re: [Update-Syntax] ???
am 28.08.2006 10:21:36 von Thomas Rachel
Thomas Enzinger wrote:
>> wert = case name
>> when 'abcd' then 'aa'
>> when 'zzz' then 'xxll'
>> else wert
>> end
in Verbindung mit
| UPDATE test SET ???? WHERE ID="f4"
> Kannst du das etwas genauer erklären?
Das steht doch - glaube ich - auch im Handbuch unter http://dev.mysql.com.
Kurz gesagt: das UPDATE betrifft alle Einträge, deren ID="f4" ist. (ID='f4'
wäre übrigens besser, weil standardkonformer.) Bei diesen wird wert auf den
Wert gesetzt, der bei obigem case herauskommt.
Der case ergibt
-> für den Fall, daà name='abcd' ist, den Wert 'aa'
-> für den Fall, daà name='zzz' ist, den Wert 'xxll'
-> in allen anderen Fällen wert
Somit wird
-> bei name='abcd' wert auf 'aa' gesetzt,
-> bei name='zzz' wert auf 'xxll' gesetzt,
-> ansonsten wert auf wert gesetzt (also unverändert gelassen).
> Werden hier alle Werte gesetzt oder nur der erste der zutrifft?
Wie immer werden alle Datensätze, bei denen das WHERE-Kriterium zutrifft, in
Erwägung gezogen; wirklich geändert werden nur die, bei denen einer der
genannten Fälle in der case-Anweisung zutrifft, denn wenn bei einem UPDATE
bei einem Datensatz der alte Wert gleich dem neuen ist, wird dieser
Datensatz nicht mitgezählt.
Thomas
--
Lebe jeden Tag so, als wäre es Dein letzter!
Irgendwann wird es die Wahrheit sein.