[Update-Syntax] ???

[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 27.08.2006 21:53:41 von Thomas Enzinger

> wert = case name
> when 'abcd' then 'aa'
> when 'zzz' then 'xxll'
> else wert
> end

Kannst du das etwas genauer erklären?
Werden hier alle Werte gesetzt oder nur der erste der zutrifft?
Was bewirkt "else wert"?

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.