Spalte eine Tabelle updaten

Heidestrand

Benutzer
Beiträge
7
Hallo Leute,

ich habe nur eine kleine Sache und hoffe, dass ihr mir helfen könnt, diese schnell zu lösen.
Ich habe zwei Tabellen: tblNewOrder und tblTEST.
In tblTEST habe ich zwei Spalten "Verkaufsbeleg" und "Beschreibung".
In tblNewOrder mache ich 5 Spalten, eine davon heißt auch "Verkaufsbeleg" und eine andere "System". Letztere ist leer.
Nun möchte ich gerne per SQL, dass er mir die Spalte "System" dort mit Werten aus der Spalte "Beschreibung" füllt, wo in beiden Tabellen der Verkaufsbeleg identisch ist.

Bis jetzt habe ich diesen Code:
Code:
UPDATE tblNewOrder
SET tblNewOrder.System = (SELECT Verkaufsbeleg
               FROM tblTEST
               LEFT JOIN tblTEST.Verkaufsbeleg ON tblNewOrder.Verkaufsbeleg)
WHERE tblTEST.Verkaufsbeleg = tblNewOrder.Verkaufsbeleg;
.

Nur wirft er mir die Fehlermeldung Syntaxfehler raus.

Wisst ihr, was an meinem Code falsch ist?

Danke im Voraus!
 
Werbung:
Deine Join-Clause ist falsch.
Soetwas gibt es nicht:
Code:
LEFT JOIN tblTEST.Verkaufsbeleg ON tblNewOrder.Verkaufsbeleg
Dazu kommt dann noch ein "ambiguously defined column", da es die Spalte "verkaufsbeleg" in beiden tabellen gibt und du keinen Alias verwendest.
Deine Where-Clause außerhalb des Sub-Selects ist übrigens auch unnötig... Und müsste in der Theorie auch einen Fehler werfen.

Du suchst warhscheinlich soetwas:
Code:
Update tblneworder tn
Set    tn.system =
       (Select tn.beschreibung
        From   tbltest tt
        Left   Join tblneworder tne
        On     tn.verkaufsbeleg = tt.verkaufsbeleg
         And tne.vekaufsbeleg = tt.verkaufsbeleg);

Wobei man das ganze auch noch etwas reduzieren könnte:
Code:
Update tblneworder tn
Set    tn.system =
       (Select tn.beschreibung
        From   tbltest tt
        Where  tt.verkaufsbeleg = tn.verkaufsbeleg);

Wenn du dieses Update mehrfach ausführst möchtest du aber wahrscheinlich auch nur die updaten, die wirklich leer sind... Performance und so :)
Code:
Update tblneworder tn
Set    tn.system =
       (Select tn.beschreibung
        From   tbltest tt
        Where  tt.verkaufsbeleg = tn.verkaufsbeleg)
Where tn.system Is Null;
 
Zuletzt bearbeitet:
Danke für die Nachricht, Distrilec. Ich habe mir jetzt mal deinen letzten Code geschnappt, aber beim Ausführen fragt er mich nach einem Parameter
und sagt mir, dass die Operation eine aktualisierbare Abfrage verwenden muss. Das sollte ja eigentlich nicht sein, dass es mich nach etwas fragt ;)
 
Zuletzt bearbeitet:
Naja, schau. Wenn ich deinen Code so ausführe, kommt das:

21548112nk.png


Edit:

ich habs kurz umgebastelt:
Code:
UPDATE tblNewOrder
SET tblNewOrder.System =
       (SELECT tblTEST.Beschreibung
        From   tblTEST
        Where  tblTEST.Verkaufsbeleg = tblNewOrder.Verkaufsbeleg)
Where tblNewOrder.System Is Null;
Jetzt ist zwar die Abfrage weg, aber der Fehler kommt noch..
 
Probier mal:
Code:
UPDATE    t1
SET        t1.[System] = t2.Beschreibung
FROM    tblNewOrder t1
INNER JOIN tblTEST t2
ON        t2.Verkaufsbeleg = t1.Verkaufsbeleg
WHERE    t1.[System] IS NULL
 
Sry.... Aus tn.beschreibung sollte ein tt.beschreibung werden.... Was ein Buchstabe in einem Alias doch für Auswirkungen haben kann ...:D

Edit:
Nocheinmal angepasst
Code:
Update tblneworder tn
Set    tn.system =
       (Select tt.beschreibung
        From   tbltest tt
        Where  tt.verkaufsbeleg = tn.verkaufsbeleg)
Where tn.system Is Null;
 
Danke für eure Antworten!

@ukulele:
Wenn ich deinen Code verwende, gibt er mir diesen Fehler:
21589909tp.png
Ich weiß leider nicht, was da fehlt..

@Distrilec
Auch danke an dich für deinen Code, jedoch kommt auch hier immer noch die Meldung, dass die Operation eine aktualisierbare Abfrage verwenden muss.
Ich habe das mal gegoogelt und auch eine Lösung gefunden: "Öffnen Sie die Abfrage-Eigenschaften und stellen die Option «Eindeutige Datensätze» auf «Ja». Anschließend wird die Abfrage problemlos laufen, es sei denn es besteht immer noch eine 1:n-Referenz, d.h. in der verbundenen Abfrage sind nicht alle Bezüge eindeutig".
Die Option finde ich bei mir nicht..
 
Welche Primary Keys hat deine Tabelle tbltest ? Scheint mir so als würde der Verkaufsbeleg nicht reichen... Musst du uns natürlich sagen :)
 
Ok, tut mir leid :D Also eigentlich hat die tblTEST keinen PK, sie wird dynamisch erzeugt und soll danach wieder gelöscht werden. Eine andere Query erstellt tblTEST nämlich.
tblTEST sieht so aus:
21589957ya.png

Die tblNewOrder hat auch noch keinen PK, den kann ich aber einfügen mit Code.
 
Dann hast du falsche Daten....
Code:
Select verkaufsbeleg, count(*)
From tblTest
Group By verkaufsbeleg
Order By count(*) desc
Ausführen... Und gucken wo überall der Count Wert != 1 ist :)
 
Ich merke gerade, in der tblTEST kommen teilweise die Verkaufsbelege mehrfach vor. Das ist natürlich nicht gut.
Bezogen auf deinen Code kommen nur 55% der Ergebnisse auf =1, der Rest ist !=1.
 
Werbung:
Genau... Dementsprechend gibt es in meinem Subselect auch mehrere Rückgabewerte... Und ich kann in ein Feld nicht 2+ Werte eintragen... Das funktioniert nicht ;)
 
Zurück
Oben