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,d

    Tabelle 2:
    n,s

    UPDATE 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!


Anmelden zum Antworten