Syntaxfehler bei update zwischen 2 Tabellen



  • nabend zusammen,

    ich hab 2 tabellen:

    CS_tmp:
    id | Preis_neu |......

    FK_Preis:
    iid | dftVK | ......

    nun möchte ich die Werte aus Preis_neu in dftVK schreiben. Nun hab ich mir gedacht ich löse es so:

    UPDATE(SELECT CS_tmp.Preis_neu, CS_tmp.id, FK_Preis.dftVK, FK_Preis.lID FROM CS_tmp, FK_Preis WHERE  FK_Preis.lID = CS_tmp.id)SET FK_Preis.dftVK = CS_tmp.Preis_neu
    

    Nun bekomme ich allerdings eine Fehlerausgabe: "Syntaxfehler bei SET".

    was mache ich falsch? 😮



  • Das funktioniert so nicht.

    Probiers mal mit

    INSERT INTO tabelle2 (id, feld1, feld2) SELECT id, feld1, feld2 FROM tabelle1 WHERE bla bla bla ....
    

    ms



  • mit INSERT hatte ich auch meine probs....

    hab das prob im mom so gelöst:

    UPDATE FK_Preis AS u INNER JOIN (SELECT id, Preis_neu AS neu FROM CS_tmp) AS o ON u.lID = o.id SET  u.dftVK = o.neu
    

    funzt, aber ob ich damit glücklich bin....



  • UPDATE tabelle SET wasausimmer = (SELECT wasausimre FROM) WHERE wasausimmer = 2

    Kommt aber auf das RDBMS an.
    Bei MSSQL funkt es. MySQL weiß ich nicht. Musst testen.



  • Avalon schrieb:

    mit INSERT hatte ich auch meine probs....

    hab das prob im mom so gelöst:

    UPDATE FK_Preis AS u INNER JOIN (SELECT id, Preis_neu AS neu FROM CS_tmp) AS o ON u.lID = o.id SET  u.dftVK = o.neu
    

    funzt, aber ob ich damit glücklich bin....

    Das Problem ist, das du beim ersten Anlauf versucht hast, ein Update auf das Ergebnis einer Abfrage auszuführen:

    (SELECT CS_tmp.Preis_neu, CS_tmp.id, FK_Preis.dftVK, FK_Preis.lID FROM CS_tmp, FK_Preis WHERE  FK_Preis.lID = CS_tmp.id)
    

    Sowas wird von den wenigsten Datenbanken unterstützt. Gebräuchlichere Methoden sehen so aus:

    Einfach verknüpft:

    update tabelle1, tabelle2 set tabelle1.feld = tabelle2.feld where tabelle1.feld = tabelle2.feld
    

    Oder per Subquery:

    update tabelle1 set tabelle1.feld = (select tabelle2.wert from tabelle2 where tabelle2.feld = tabelle1.feld)
    


  • Cpp_Junky schrieb:

    Einfach verknüpft:

    update tabelle1, tabelle2 set tabelle1.feld = tabelle2.feld where tabelle1.feld = tabelle2.feld
    

    Oder per Subquery:

    update tabelle1 set tabelle1.feld = (select tabelle2.wert from tabelle2 where tabelle2.feld = tabelle1.feld)
    

    Die Methoden hatte ich eigentlich zuerst versucht. kam aber irgendwas das id kein null wert haben darf.

    ich habe hier eine sybase db und die hat mir nicht nur einmal kopfzerbrechen gemacht. 🙄

    dank euch für die tipps 👍


Anmelden zum Antworten