# Mysql update mit Subquery returns more than 1 row



## p-dichlorbenzol (2. März 2009)

Hoi Profis  ,

ich brauch  mal eure hilfe zu :


```
UPDATE fertig SET anzahl_neu = ((select anzahl_gesamt from heute) - (select anzahl_gesamt from gestern) )
```
 
jetzt  kommt aber 

```
#1242 - Subquery returns more than 1 row
```


ich möchte die daten von gestern minus die daten von heute nehmen
und diese in neu speichern

sollte eigentlich ganz einfach seien oder 

Das SELECT mehr als eine Ergebniszeile liefert. weis ich !

besten dank allen helfern


----------



## kuddeldaddeldu (2. März 2009)

Hi,



p-dichlorbenzol hat gesagt.:


> Das SELECT mehr als eine Ergebniszeile liefert. weis ich !



Aha, und soll MySQL sich jetzt aussuchen, aus welcher Ergebniszeile der Wet genommen werden soll? 

LG


----------



## p-dichlorbenzol (2. März 2009)

jo

sag  mir wie soll ich das  mysql  sagen *g*

oder wie schafft es sonst  kannn die tab auch anders anlegen


----------



## kuddeldaddeldu (2. März 2009)

Hi,



p-dichlorbenzol hat gesagt.:


> jo
> 
> sag  mir wie soll ich das  mysql  sagen *g*



Gar nicht. Formuliere eine Unterabfrage, die einen skalaren Wert liefert.

Und poste bitte in halbwegs vernünftigem Deutsch (in ganzen Sätzen mit Interpunktion  und unter Berücksichtigung der Rechtschreibung), wie es in der Netiquette steht.

LG


----------



## WiZdooM (3. März 2009)

Hi

Besser wäre es wohl - wenn du eine mathematische Operation (in diesem Falle eine Subtraktion) durchführen willst - mittels eines SELECT erst die Anzahl der Zeilen zählen lässt - so bekommst du einen einzeiligen Wert. Das gleiche machst du auch für den zweiten Datensatz, subtrahierst das ganze und schreibst den Wert normal zurück.

Details bietet die mysql-Dokumentation.


----------



## dbwizard (3. März 2009)

p-dichlorbenzol hat gesagt.:


> Hoi Profis  ,
> 
> ich brauch  mal eure hilfe zu :
> 
> ...



- Hallo, 

es gibt mehr als einen Wert im Attribut "Anzahl_gesamt" in der Tabelle "Heute" oder "Gestern". (BTW ein selten dämliches Datenmodel). Wenn du es so lösen möchtest, musst du eine Aggregatsfunktion benutzen (sum) :


```
UPDATE fertig SET anzahl_neu = ((select sum(anzahl_gesamt) from heute) - (select sum(anzahl_gesamt) from gestern) )
```

- Ob dies aber dein gwünschtes Resultat ist, weiss ich auch nicht, dazu müsstest du mehr Informationen liefern


Gruss


----------

