UPDATE mit Subquery

UPDATE mit Subquery

am 05.01.2006 22:11:18 von Guido Schmidt

Hallo,

tabelle1:
id | datum
--------------------
1 | 2005-12-30
2 | 2004-10-9
34 | 2002-01-01

id | datum | param
-----------------------------
1 | 0000-00-00 | 54
1 | 0000-00-00 | 87
1 | 0000-00-00 | 12
2 | 0000-00-00 | 12
34 | 0000-00-00 | 45
34 | 0000-00-00 | 54
34 | 0000-00-00 | 96

Ich möchte das Datum aus tabelle1 per UPDATE in tabelle2 übernehmen. Die
Datensätze in den beiden Tabellen sollen über das Feld ID verknüpft
werdenen (1:n). Bezüglich des SQL-Statements stehe ich auf dem Schlauch.
sinngemäß (aber falsch):

UPDATE tabelle2 AS t2
SET datum = (SELECT datum FROM tabelle1 AS t1 WHERE t1.id = t2.id)

Nein, es sollen keine Daten redundant gespeichert werden. Das Datum in
tabelle1 ist ein dauerhaft gespeicherter Wert, während das Datum bei den
Datensätzen in tabelle 2 sich häufig ändert. Mit dem Update-Statement
soll nur das Datum aus tabelle1 als Initialwert eingefügt werden.

Guido

Re: UPDATE mit Subquery

am 05.01.2006 22:37:26 von Kai Ruhnau

Guido Schmidt wrote:
> tabelle1:
> id | datum
> --------------------
> 1 | 2005-12-30
> 2 | 2004-10-9
> 34 | 2002-01-01
>
> id | datum | param
> -----------------------------
> 1 | 0000-00-00 | 54
> 1 | 0000-00-00 | 87
> 1 | 0000-00-00 | 12
> 2 | 0000-00-00 | 12
> 34 | 0000-00-00 | 45
> 34 | 0000-00-00 | 54
> 34 | 0000-00-00 | 96
>
> Ich möchte das Datum aus tabelle1 per UPDATE in tabelle2 übernehmen. Die
> Datensätze in den beiden Tabellen sollen über das Feld ID verknüpft
> werdenen (1:n). Bezüglich des SQL-Statements stehe ich auf dem Schlauch.
> sinngemäß (aber falsch):
>
> UPDATE tabelle2 AS t2
> SET datum = (SELECT datum FROM tabelle1 AS t1 WHERE t1.id = t2.id)

So richtig sehe ich gerade nicht, warum das falsch sein sollte, aber es
kann durchaus sein, dass mir eine Beschränkung bezüglich Subselects bei
UPDATEs nicht bekannt ist.

Oder hast du einfach eine MySQL-Version <4.1?

> Nein, es sollen keine Daten redundant gespeichert werden. Das Datum in
> tabelle1 ist ein dauerhaft gespeicherter Wert, während das Datum bei den
> Datensätzen in tabelle 2 sich häufig ändert. Mit dem Update-Statement
> soll nur das Datum aus tabelle1 als Initialwert eingefügt werden.

MySQL unterstützt als Erweiterung UPDATEs über mehrere Tabellen:

UPDATE tabelle2
INNER JOIN tabelle1 ON tabelle1.id=tabelle2.id
SET tabelle2.datum=tabelle1.datum

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: UPDATE mit Subquery

am 06.01.2006 08:29:16 von Guido Schmidt

Kai Ruhnau schrieb:

>> UPDATE tabelle2 AS t2
>> SET datum = (SELECT datum FROM tabelle1 AS t1 WHERE t1.id = t2.id)
>
> So richtig sehe ich gerade nicht, warum das falsch sein sollte, aber es
> kann durchaus sein, dass mir eine Beschränkung bezüglich Subselects bei
> UPDATEs nicht bekannt ist.
>
> Oder hast du einfach eine MySQL-Version <4.1?

Doing. Nach 15 Stunden vor dem Notebook hatte ich offenbar
Wahrnehmungsstörungen. Ich hatte die Version des MySQL-Servers abgefragt
und in meinem Hirn als Version 4.1.x gespeichert. Nun noch mal geguckt:
Ist nur eine 4.0.25.

Vielen Dank für die Hilfe.

Guido Haeger