php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.02.2012, 15:05  
Neuer Benutzer
 
Registriert seit: 03.02.2012
Beiträge: 1
PHP-Kenntnisse:
Anfänger
HolgerNils befindet sich auf einem aufstrebenden Ast
Standard MySQL - Bedingest Update aus Detailtabelle

Hi in die Runde,
ich habe der gerne mal ein Problem...
...und hoffe, daß einer von Euch mir einen Tipp geben kann.
Wir fahren MySql 5.0.84 und ich verzweifel an folgender Herausforderung.

Tabelle1
KeyT1 ValueT1
A 0
B 3
C 1
D 0
E 1

Tabelle2
KeyT2 ValueT2
A 1
A 2
A 3
B 1
B 1
D 2
D 2

Nun muss ich folgendes machen.
Addieren der Einträge aus Tabelle2 für jeden Key und die entsprechenden Sätze aus Tabelle1 - und nur die! - damit aktualisieren.
Sätze aus Tabelle1, die in Tabelle2 NICHT vorhanden sind sollen unberührt bleiben.

Tabelle1 soll also anschliessend folgendermassen aussehen:

Tabelle1 (nach Summierung)
KeyT1 ValueT2
A 6 (1+2+3 aus Tabelle2)
B 2 (1+1 aus Tabelle2)
C 1 (Alter Wert wie vorher, da in Tabelle2 kein Satz vorhanden ist)
D 4 (2+2 aus Tabelle2)
E 1 (Alter Wert wie vorher, da in Tabelle2 kein Satz vorhanden ist)

Also A B und D wurden aktualisiert, weil dort in Tabelle2 Detailsätze vorhanden sind.
C und E sollen nicht verändert werden, nur wenn Detailsätze vorhanden sind - sind sie aber nicht.

Ich habe schon mit Sum, join, in etc gearbeitet, aber immer werden die Sätze C und E mit '0' (Null) aktualisiert, weil
die Aggregatfunktionen bei nicht vorhandenem Gegenstück auf Null rauskommt

z. B.
UPDATE Tabelle1 T1 SET ValueT1 = (Select SUM(ValueT1) FROM Tabelle2 T2 WHERE KeyT1 = KeyT2)

Hätte bitte jemand einen heissen Tipp?
VG
Holger
HolgerNils ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.02.2012, 17:34  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von HolgerNils Beitrag anzeigen
Hi in die Runde,
ich habe der gerne mal ein Problem...
...und hoffe, daß einer von Euch mir einen Tipp geben kann.
Wir fahren MySql 5.0.84 und ich verzweifel an folgender Herausforderung.

Tabelle1
KeyT1 ValueT1
A 0
B 3
C 1
D 0
E 1

Tabelle2
KeyT2 ValueT2
A 1
A 2
A 3
B 1
B 1
D 2
D 2

Nun muss ich folgendes machen.
Addieren der Einträge aus Tabelle2 für jeden Key und die entsprechenden Sätze aus Tabelle1 - und nur die! - damit aktualisieren.
Sätze aus Tabelle1, die in Tabelle2 NICHT vorhanden sind sollen unberührt bleiben.

Tabelle1 soll also anschliessend folgendermassen aussehen:

Tabelle1 (nach Summierung)
KeyT1 ValueT2
A 6 (1+2+3 aus Tabelle2)
B 2 (1+1 aus Tabelle2)
C 1 (Alter Wert wie vorher, da in Tabelle2 kein Satz vorhanden ist)
D 4 (2+2 aus Tabelle2)
E 1 (Alter Wert wie vorher, da in Tabelle2 kein Satz vorhanden ist)

Also A B und D wurden aktualisiert, weil dort in Tabelle2 Detailsätze vorhanden sind.
C und E sollen nicht verändert werden, nur wenn Detailsätze vorhanden sind - sind sie aber nicht.

Ich habe schon mit Sum, join, in etc gearbeitet, aber immer werden die Sätze C und E mit '0' (Null) aktualisiert, weil
die Aggregatfunktionen bei nicht vorhandenem Gegenstück auf Null rauskommt

z. B.
UPDATE Tabelle1 T1 SET ValueT1 = (Select SUM(ValueT1) FROM Tabelle2 T2 WHERE KeyT1 = KeyT2)

Hätte bitte jemand einen heissen Tipp?
VG
Holger
Deine Beschreibung ist für B falsch, heir der Beweis:

Code:
test=# select * from t1;
 key | value
-----+-------
 a   |     0
 b   |     3
 c   |     1
 d   |     0
 e   |     1
(5 rows)

test=*# select * from t2;
 key | value
-----+-------
 a   |     1
 a   |     2
 a   |     3
 b   |     1
 b   |     1
 d   |     2
 d   |     2
(7 rows)

test=*# update t1 set value = t1.value + foo.value from (select key, sum(value) as value from t2 group by key) foo where t1.key=foo.key;
UPDATE 3
test=*# select * from t1 order by key;
 key | value
-----+-------
 a   |     6
 b   |     5
 c   |     1
 d   |     4
 e   |     1
(5 rows)
Andreas
akretschmer ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Update Bild aus mysql Datenbank. YEP PHP Tipps 2009 3 05.12.2009 23:48
[Erledigt] Update Problem wegen MySQL Version ? JanM Datenbanken 16 15.11.2009 22:35
[Erledigt] Mysql update setzt leeren Wert Abakay PHP Tipps 2009 19 08.05.2009 15:21
MySQL UPDATE funktioniert nicht dampfrakete Datenbanken 16 20.02.2009 11:33
[Erledigt] Problem beim Mysql UPDATE mastertnt PHP Tipps 2009 4 14.02.2009 17:26
[Erledigt] MySQL UPDATE tut nichts cycap Datenbanken 22 04.06.2008 13:09
Update auf php5 -->Problem mit mysql PHP Tipps 2006 6 15.03.2006 12:43
[Erledigt] mysql: INSERT und wenn vorhanden UPDATE Datenbanken 7 07.01.2006 09:54
mysql problem: mysql update wird nicht ausgeführt schmiddy PHP Tipps 2007 4 27.12.2005 20:35
einfache mysql abfrage und mysql update haut nicht ganz hin djrace PHP Tipps 2005-2 6 12.08.2005 15:28
update in mysql über php se-clan PHP Tipps 2005-2 24 17.07.2005 19:57
MySQL UPDATE Befehl funktioniert nicht PHP Tipps 2005 6 24.01.2005 15:03
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
php / Mysql Update auf neuste Version PHP Tipps 2007 5 05.01.2005 19:34
[Erledigt] Wieso geht das mysql update nich PHP Tipps 2004 6 30.07.2004 11:55


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:58 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum