Franco: mysql Statement gesucht

Hallo Mitstreiter,

ich nutze mysql 5. Ich möchte die Spalte namens Spalte_1 in meiner Tabelle_1 updaten.
Die Werte, die nun eingesetzt werden sollen, stehen in Tabelle_2 in Spalte_1.

In beiden Tabellen gibt es eine Spalte_2, die jeweils denselben (unique) Wert je Datensatz beinhaltet.

Ich suche also ein Statement, das in etwa folgendes aussagt:

Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

Kann man das so machen oder sollte ich lieber über ein php-script dioeses Vorhaben realisieren?

Güße, Franco

  1. Grüße,

    Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

    jaa? was genau hindert dich daran eben das zu machen?
    afaik wird es sogar funktionieren
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Grüße,

      Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

      jaa? was genau hindert dich daran eben das zu machen?
      afaik wird es sogar funktionieren
      MFG
      bleicher

      Hallo bleicher,

      ich bekomms nicht in ein Statement umgesetzt. Irgendwie hab ichs heute nicht mit Subselects und Konsorten. Brett vorm Kopf, weißt?

      Grüße, Franco

      1. Hallo,

        Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

        jaa? was genau hindert dich daran eben das zu machen?
        ich bekomms nicht in ein Statement umgesetzt. Irgendwie hab ichs heute nicht mit Subselects und Konsorten. Brett vorm Kopf, weißt?

        Ilja würde vermutlich ein Subselect vorschlagen, ich einen INNER JOIN von Tabelle1 und Tabelle2. Wenn Du den implizit schreibst, ...

        ... was hindert Dich daran, das da

        Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

        wortwörtlich in SQL zu übersetzen?

        [link:http://dev.mysql.com/doc/refman/5.1/en/update.html@title=UPDATE]                            -- Update  
            Tabelle_1 t1,                 -- (Aliasnamen aus Bequemlichkeit)  
                                          -- Tabelle1  
            Tabelle_2 t2                  -- die zweite Tabelle brauchst Du auch  
                                          -- (obwohl Du nur die erste updatest)  
        SET                               -- set  
            t1.Spalte_1 = t2.Spalte_1     -- Spalte_1=Wert_aus_Tabelle_2_Spalte_1  
        WHERE                             -- where  
            t1.Spalte_2 = t2.Spalte_2     -- Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2
        

        Das ist nun wirklich kein Hexenwerk. Abgesehen von dem Eingeklammerten steht in den Kommentaren genau das, was Du bereits geliefert hast.

        Freundliche Grüße

        Vinzenz

        1. Hallo Vincent,

          vielen Danke für Deine Hilfe und die Erklärung dazu.

          Ilja würde vermutlich ein Subselect vorschlagen, ich einen INNER JOIN von Tabelle1 und Tabelle2.

          Könntest Du mir die Subselect-Lösung auch noch verraten? Ich möchte die beiden gerne miteinander vergleichen.

          Das ist nun wirklich kein Hexenwerk. Abgesehen von dem Eingeklammerten steht in den Kommentaren genau das, was Du bereits geliefert hast.

          Ich war mir einfach rein syntaktisch unsicher. Ich wußte z.B. auch nicht, dass ich die 2. Tabelle schon mit ins update einbeziehen muss, obwohl ich nur die erste update. Da fehlt mir einfach ein bisschen Erfahrung oder Übung.

          Grüße von Franco

          1. moin,

            Könntest Du mir die Subselect-Lösung auch noch verraten? Ich möchte die beiden gerne miteinander vergleichen.

            die JOIN variante finde ich hier gar nicht so schlecht, aber ich gebe dir gerne eine variante mit einer korrelierten unterabfrage.

            UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
                                                   FROM Tabelle_2 t2
                                                   t2.Spalte_2  = t1.Spalte_2
                                                  )
            WHERE EXISTS (SELECT NULL
                          FROM Tabelle_2 t2
                          t2.Spalte_2  = t1.Spalte_2
                         )
            ;

            Ilja

            1. Hi Ilja!

              UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
                                                     FROM Tabelle_2 t2
                                                     t2.Spalte_2  = t1.Spalte_2
                                                    )
              WHERE EXISTS (SELECT NULL
                            FROM Tabelle_2 t2
                            t2.Spalte_2  = t1.Spalte_2
                           )
              ;

              Fehlen da nicht die WHERE keywords? Also wie folgt:

              UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
                                                     FROM Tabelle_2 t2
                                                     WHERE t2.Spalte_2  = t1.Spalte_2
                                                    )
              WHERE EXISTS (SELECT NULL
                            FROM Tabelle_2 t2
                            WHERE t2.Spalte_2  = t1.Spalte_2
                           )
              ;

              mfG
              Benjamin

              --
              For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.
              1. moin,

                Fehlen da nicht die WHERE keywords? Also wie folgt:

                in der tat, die sind mir abhanden gekommen, muss erst mal wieder ein paar mehr auf vorrat kaufen.

                Ilja

  2. Lieber Franco,

    im Grunde hast Du die Lösung doch schon genannt:

    Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.

    Du hängst anscheinend an der Stelle

    set Spalte_1=Wert_aus_Tabelle_2_Spalte_1

    stimmt's?

    Nach meinen bescheidenen und noch recht frischen (My)SQL-Erkenntnissen müsste dieser Teil in etwa so lauten:
    SET Spalte_1 = Tabelle_2.Spalte_1

    Da ich mittels PHP mit meiner DB kommuniziere muss ich die Spaltennamen mit dem Backtick "escapen" und dann sieht das bei mir so aus:
    SET Spalte_1=Tabelle_2.Spalte_1``

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)