SELECT und UPDATE in einem

SELECT und UPDATE in einem

am 17.03.2006 01:40:04 von Sebastian Gohres

Hi!

Ich würde gerne in einer Tabelle "daten" in der Spalte "punkte" eines
bestimmten Datensatzes den Wert um einen gewissen Wert inkrementieren.
Dieser Wert soll aus der Tabelle "punkte" aus der Spalte "wert" eines
bestimmten Datensatzes genommen werden.

In der eingesetzen MySQL Version werden keine SubQueries unterstützt.

Als SubQuery hätte ich dies so gelöst:

[code]

UPDATE daten SET punkte = punkte + (SELECT wert FROM punkte WHERE id =
24) WHERE id = 324

[/code]

Geht dies irgendwie mit JOINs? Habe über JOINs nur etwas im Zusammenhang
mit SELECTs gefunden.

Oder muss ich erst ein SELECT machen und dann in einem neuen Query ein
UPDATE?

Danke für eure Hilfe!

MfG
S. Gohres

Re: SELECT und UPDATE in einem

am 17.03.2006 16:53:16 von Johannes Vogel

Hi Sebastian

Sebastian Gohres wrote:
> In der eingesetzen MySQL Version werden keine SubQueries unterstützt.
> Als SubQuery hätte ich dies so gelöst:
> UPDATE daten SET punkte = punkte + (SELECT wert FROM punkte WHERE id =
> 24) WHERE id = 324
> Geht dies irgendwie mit JOINs? Habe über JOINs nur etwas im Zusammenhang
> mit SELECTs gefunden.
> Oder muss ich erst ein SELECT machen und dann in einem neuen Query ein
> UPDATE?

Erst ein Select und dann ein Update.
HTH, Johannes

Re: SELECT und UPDATE in einem

am 17.03.2006 17:49:51 von Sven Paulus

Johannes Vogel wrote:
>> In der eingesetzen MySQL Version werden keine SubQueries unterstützt.
>> Als SubQuery hätte ich dies so gelöst:
>> UPDATE daten SET punkte =3D punkte + (SELECT wert FROM punkte WHERE id =
=3D
>> 24) WHERE id =3D 324
>> Geht dies irgendwie mit JOINs? Habe über JOINs nur etwas im Zusammenh=
ang
>> mit SELECTs gefunden.
>> Oder muss ich erst ein SELECT machen und dann in einem neuen Query ein
>> UPDATE?
> Erst ein Select und dann ein Update.

Noe, muesste doch auch zusammen gehen:

UPDATE daten, punkte=20
SET daten.punkte =3D daten.punkte + punkte.wert
WHERE daten.id =3D 324 AND punkte.id =3D 24

Sollte ab MySQL 4.0.4 funktionieren.

Re: SELECT und UPDATE in einem

am 17.03.2006 17:56:17 von Andreas Sakowski

Hallo

"Sebastian Gohres" schrieb
> UPDATE daten SET punkte = punkte + (SELECT wert FROM punkte WHERE id
> = 24) WHERE id = 324

mysql> create table punkte ( id int not null auto_increment key ,
punkte int ) ;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into punkte ( id , punkte ) values ( 24 , 1 ) , ( 324 ,
2 ) ;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from punkte ;
+-----+--------+
| id | punkte |
+-----+--------+
| 24 | 1 |
| 324 | 2 |
+-----+--------+
2 rows in set (0.00 sec)

mysql> update punkte a left join punkte b on b.id = 24 set a.punkte =
a.punkte + b.punkte where a.id = 324 ;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from punkte ;
+-----+--------+
| id | punkte |
+-----+--------+
| 24 | 1 |
| 324 | 3 |
+-----+--------+
2 rows in set (0.00 sec)

könnte das sein was Du suchst. Allerdings getestet mit 5.0.18

Gruß
Andreas