MySql: UPDATE mit JOIN
-
Ich möchte einige Datensätze meiner Datenbank aktualisieren.
Leider bestimmen sich die Datensätze über eine Verknüfung mehrerer Tabellen was mir dann aber nicht gelingt.
Hier ein Besipiel, hoffe es wird damit klar:
Tabelle 1:
a,c,dTabelle 2:
n,sUPDATE t1 JOIN t2 ON t1.a=t2.n SET t1.c=t1.d+t1*d WHERE t1.c!=100 AND t2.s = 0
Der Update Befehl aktualisiert nur daten innerhalb von Tabelle 1.
Geht das mit dem Join auf Tabelle 2?
Und ist es erlaubt in der Bedingung die gerade aktualiserte Spalte aufzufphren.Leider hilft mir die Fehlermeldung nicht weiter, hoffe es weiß jemand Rat.
-
Hallo,
du brauchst an der Stelle gar keinen Join. Es reicht folgendes:
UPDATE t1,t2 SET t1.a=t1.b WHERE t1.c=t2.c
VlG
-
Ist zwar schon etwas her, aber mein Problem besteht immernoch.
Momentan habe ich diese Abfrage: (net schimpfen, die Datenbank war vorhanden...)
SELECT up1.nummer, count(up2.f) AS co, min(up2.f) AS ma FROM unter AS up1 LEFT JOIN pv ON pv.unter=up1.nummer LEFT JOIN unter AS up2 ON up2.nummer=pv.vor LEFT JOIN hp ON up1.hp=hp.nummer WHERE up1.rT IS NOT NULL GROUP by up1.nummer ORDER BY co, up1.nummer
Die ausgabe wird nun gefiltert:
if (('co'!=0) && ('ma'!=100))
UPDATE unter SET rT=NULL WHERE nummer='nummer'
Geht das irgendwie in eine Update -Anweisung zusammenzufassen?
-
hmmz schrieb:
Hallo,
du brauchst an der Stelle gar keinen Join. Es reicht folgendes:
UPDATE t1,t2 SET t1.a=t1.b WHERE t1.c=t2.c
Das ist aber ein JOIN. Wobei du Recht hast, er braucht wirklich keinen JOIN:
UPDATE t1 SET t1.a=t1.b WHERE t1.c IN (SELECT c FROM t2)
-
SELECT up1.nummer, count(up2.f) AS co, min(up2.f) AS ma FROM unter AS up1 LEFT JOIN pv ON pv.unter=up1.nummer LEFT JOIN unter AS up2 ON up2.nummer=pv.vor LEFT JOIN hp ON up1.hp=hp.nummer WHERE up1.rT IS NOT NULL GROUP by up1.nummer ORDER BY co, up1.nummer
-> (nur umformatieren = lesbar machen)
SELECT up1.nummer, COUNT(up2.f) AS co, MIN(up2.f) AS ma FROM unter AS up1 LEFT JOIN pv ON pv.unter = up1.nummer LEFT JOIN unter AS up2 ON up2.nummer = pv.vor LEFT JOIN hp ON up1.hp = hp.nummer WHERE up1.rT IS NOT NULL GROUP by up1.nummer ORDER BY co, up1.nummer
AntonWert schrieb:
Die ausgabe wird nun gefiltert:
if (('co'!=0) && ('ma'!=100))
->
SELECT up1.nummer, COUNT(up2.f) AS co, MIN(up2.f) AS ma FROM unter AS up1 LEFT JOIN pv ON pv.unter = up1.nummer LEFT JOIN unter AS up2 ON up2.nummer = pv.vor LEFT JOIN hp ON up1.hp = hp.nummer WHERE up1.rT IS NOT NULL GROUP by up1.nummer ORDER BY co, up1.nummer HAVING COUNT(up2.f) > 0 AND MIN(up2.f) <> 100
AntonWert schrieb:
UPDATE unter SET rT=NULL WHERE nummer='nummer'
Geht das irgendwie in eine Update -Anweisung zusammenzufassen?
->
UPDATE unter SET rT = NULL WHERE nummer IN ( SELECT up1.nummer FROM unter AS up1 LEFT JOIN pv ON pv.unter = up1.nummer LEFT JOIN unter AS up2 ON up2.nummer = pv.vor LEFT JOIN hp ON up1.hp = hp.nummer WHERE up1.rT IS NOT NULL GROUP by up1.nummer HAVING COUNT(up2.f) > 0 AND MIN(up2.f) <> 100 )
Boojah
-
hustbaer schrieb:
Boojah
Na ja, wir wollen ja nicht übertreiben. Das reicht vielleicht für ein 'Yippie', aber niemals für ein 'Boojah'.
Sorry für's OT!