SQl Statement Hilfe



  • Hallo,

    ich habe ein Problem, bei dem ich einfach nicht weiter komme.
    Ich habe zwei Tabellen, der einfachheit halber hat tabelle 1 jetzt nur mal 2 Felder nämlich id und old_id. Tabelle 2 hat nur ein Feld nämlich id.
    Mein Ziel ist es Tabelle 2 upzudaten und darin id auf den wert id aus tabelle 1 zu setzen, aber natürlcih nur, wo zutrifft Tablle2 id = tabelle 1 old_id.

    Wie könnte so ein Statement aussehen?

    Bis jetzt habe ich:

    Update tabelle2 set id = (Select id from tabelle1) Where tabelle2.id = tabelle1.old_id;
    

    Das klappt so natürlich nicht, aber mir will die korrekte Lösung einfach nicht einfallen...



  • Mal ein Versuch, auch wenn ich mir nicht sicher bin:

    Update tabelle2 set id = (Select id from tabelle1 Where tabelle1.old_id = tabelle2.id) Where tabelle2.id = tabelle1.old_id;
    

    Kommt mir komisch vor, aber du brauchst im Unterselect auch unbedingt eine Where, damit du nur eine ID bekommst.



  • Hmm,

    klappt leider auch net.
    Er meint er hätte einen Syntaxfehler bei

    tabelle1.old_id = tabelle2.id
    

    also gehe ich davon aus, das er an dieser Stelle tabelle2 nicht kennt....



  • Ich vermute mal, das From fehlt noch:

    Update tabelle2 set id = (Select id from tabelle1 Where tabelle1.old_id = tabelle2.id) from tabelle2, tabelle1 Where tabelle2.id = tabelle1.old_id;
    


  • Klappt leider auch nicht...

    Gleiche Stelle der Fehler.
    Ich habs dann mal so abgeändert, aber das brachte auch nichts.
    Wahrscheinlich läßt sich das Problem gar nicht mit einem Statement lösen....

    Update tabelle2 set id = (Select tabelle1.id from tabelle1, tabelle2  Where tabelle1.old_id = tabelle2.id) from tabelle2, tabelle1 Where tabelle2.id = tabelle1.old_id;
    


  • Doch, das müsste schon gehen...

    Beinahe das selbe habe ich auch:

    update [Values] set [value] = (select [value] from [ValueTemp] where [ValueTemp].[value-id]=[values].[id]) from [values],[ValueTemp] where [values].[id]=[valuetemp].[value-id]
    

    und das klappt ohne Probleme.

    Vielleicht probierst du mal die ganzen Bezeichner in eckige Klammern zu setzen [...], eventuell ist einer davon in SQL für irgend etwas reserviert?



  • Also die Bezeichner heissen in echt natürlich anders, die habe ich nur der einfachheit halber so genannt.



  • Hast du es mal mit den eckigen Klammern probiert? Ich war auch schon manchmal überrascht, welche Bezeichner er nicht akzeptieren will und habe mir daher angewöhnt, alles in Klammern zu setzen.



  • So jetzt poste ich hier mal das orginale Sattement, welches immer noch nicht geht:

    Update [beweg] set [inv_nr] = (Select [anl_stamm].[inv_nr] from [anl_stamm] Where [anl_stamm].[matchcode1] = [beweg].[inv_nr]) Where [beweg].[inv_nr] = [anl_stamm].[matchcode1];
    


  • Das from ausserhalb der Klemmer hast du schon probiert?

    Update [beweg] set [inv_nr] = (Select [anl_stamm].[inv_nr] from [anl_stamm] Where [anl_stamm].[matchcode1] = [beweg].[inv_nr]) from [beweg], [anl_stamm] Where [beweg].[inv_nr] = [anl_stamm].[matchcode1]
    


  • Jo hatte ich auch schon.

    Langsam geb ichs auf, aber trotzdem danke für deine Hilfe



  • Ja, dann weiß ich leider auch nicht mehr weiter 😕



  • Das hat mir jetzt keine Ruhe gelassen, daher hab ich mal die zwei Tabellen in meine Datenbank mit eingefügt:

    Tabelle anl_stamm
            Feld matchcode1
            Feld inv_nr
    
    Tabelle beweg
            Feld inv_nr
    

    Folgendes Statement:

    Update [beweg] set [inv_nr] = (Select [anl_stamm].[inv_nr] from [anl_stamm] Where [anl_stamm].[matchcode1] = [beweg].[inv_nr]) from [beweg],[anl_stamm] Where [beweg].[inv_nr] = [anl_stamm].[matchcode1]
    

    arbeitet ohne Probleme (passiert nur nichts, weil die Tabellen leer sind). Es gibt keinen Fehler irgendeiner Art.
    Datenbank: MS SQL-Server 2000.


Anmelden zum Antworten