Ich möchte ein Feld in einer Tabelle mit einer einfachen Case-Anweisung aktualisieren. Ich möchte diese Case-Anweisung jedoch nur auf eine ausgewählte Anzahl von Zeilen anwenden. Die einzige Möglichkeit für mich zu bestimmen, was diese Zeilen sind, besteht darin, sich einer anderen Tabelle anzuschließen und dann einige Bedingungen basierend auf den Feldern in dieser zweiten Tabelle zu haben.SQL Server Update Tabelle 1 mit Bedingung in Tabelle 2
Zum Beispiel, das ist, wie ich dachte, es würde funktionieren ...
update table1
set table1.field1 = case
when table1.field1 = 'foo' then 'bar'
else 'foobar'
end
join table2 on table1.obj_id=table2.id
where table2.field1 = 'fizzbuzz'
and table2.field2 in ('foo', 'bar', 'foobar')
Es scheint jedoch, dass man nicht eine Verknüpfung innerhalb der Update-Anweisung wie diese haben kann. Zumindest nicht in MS SQL.
Ich habe versucht, nach einer Antwort zu suchen, aber alles, was ich finden kann, ist Leute, die versuchen, eine Tabelle mit Daten von einer anderen Tabelle einschließlich eines Joins zu aktualisieren, wobei man eine "from" -Aussage wo meine Join ist und dann eine geschachtelte auswählen Aussage mit einem Join in diesem. Ich bin mir nicht sicher, dass dies eine Lösung für mich ist. Ich möchte nicht von einer anderen Tabelle aktualisieren, ich möchte basierend auf einer anderen Tabelle filtern.
Die einzige Lösung, die ich jetzt denken kann, ist eine Lösung mit zwei Abfragen, indem zuerst eine Liste von obj_id
s abgerufen und dann nur diese IDs in einer zweiten Update-Anweisung ausgewählt werden. Nicht ideal.
hat es eine FROM-Klausel müssen? – McNets
"Es sieht jedoch so aus, als könnte man in der update-Anweisung keinen Join haben. Zumindest nicht in MS SQL." . Das ist nicht der Fall. – AK47