982 Stimmen

Aktualisieren einer Tabelle mit JOIN in SQL Server?

Ich möchte eine Spalte in einer Tabelle aktualisieren, die eine Verknüpfung mit einer anderen Tabelle herstellt, z. B.:

UPDATE table1 a 
INNER JOIN table2 b ON a.commonfield = b.[common field] 
SET a.CalculatedColumn= b.[Calculated Column]
WHERE 
    b.[common field]= a.commonfield
AND a.BatchNO = '110'

Aber es wird geklagt:

Msg 170, Ebene 15, Zustand 1, Zeile 2
Zeile 2: Falsche Syntax bei 'a'.

Was ist hier falsch?

1voto

Jeremy Boutot Punkte 53

Aarons obiger Ansatz hat für mich perfekt funktioniert. Meine Aktualisierungsanweisung war etwas anders, da ich eine Verknüpfung auf der Grundlage von zwei in einer Tabelle verketteten Feldern vornehmen musste, um ein Feld in einer anderen Tabelle zu finden.

 --update clients table cell field from custom table containing mobile numbers

update clients
set cell = m.Phone
from clients as c
inner join [dbo].[COSStaffMobileNumbers] as m 
on c.Last_Name + c.First_Name = m.Name

-1voto

Vincent Omondi Punkte 23

Diejenigen, die MYSQL verwenden

UPDATE table1 INNER JOIN table2 ON table2.id = table1.id SET table1.status = 0 WHERE table1.column = 20

-3voto

user140301 Punkte 51

Versuchen Sie es:

UPDATE table1
SET CalculatedColumn = ( SELECT [Calculated Column] 
                         FROM table2 
                         WHERE table1.commonfield = [common field])
WHERE  BatchNO = '110'

9 Stimmen

Ich stimme ab, weil dies ein Update sein wird jede Zeile in table1 und nicht nur die Zeilen, in denen es eine Übereinstimmung im gemeinsamen Feld beider Tabellen gibt (es handelt sich um einen Left Join und nicht um einen Inner Join).

1 Stimmen

@C: Sie meinen, dass jede passende Zeile aktualisiert wird? BatchNo = '110' richtig? Sind alle Ablehnungen auf diesen Effekt zurückzuführen, oder hatten andere andere Gründe für die Ablehnung?

1 Stimmen

Ich frage, weil manche akzeptieren, dass die UPDATE-Operation einige der Zeilen auf NULL und diese Form kann eine weniger T-SQL-spezifische Lösung sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X