2012-04-11 9 views
0

Haben Sie Probleme hier.SQL Server Update-Anweisung mit einem Join für mehrere Spalten

Tabelle 1:

CID, Name, HID 
(001-233, Test1, 12345) 

Tabelle 2:

CID, Name, HID, Primary 
(001-233, Test1, 12345, '') 

Wollen Table2 aktualisieren, bei denen eine Verknüpfung mit Table1 mit einem konstanten Wert existiert genannt 'Y'

So ist Aussage wie folgt:

UPDATE T2 SET T2.Primary = 'Y' 
FROM T2 
INNER JOIN T1 
    ON (T1.CID = T2.CID 
     AND T1.HID = T2.HID) 

Diese Anweisung endet nur mit der Aktualisierung aller Zeilen, es ist so, als würde nur eine Verbindung mit einer ID hergestellt und nicht die andere? Ich gab schließlich auf und machte eine WHERE IN Unterabfrage mit einer einzigen "ID" durch Verketten der beiden IDE-Felder CID + HID. Aber ich möchte verstehen, warum das nicht mit der richtigen Verbindung funktioniert hat.

Table1 ist ein CTE ..

+0

Dies sollte funktionieren, könnten Sie einige Beispieldaten hinzufügen, die man erwarten würde nicht aktualisiert werden? – Andomar

+1

Das funktioniert für mich. Ich stelle mir vor, dass es alle Zeilen aktualisiert, da in T1 für jede Zeile von T2 übereinstimmende Zeilen vorhanden sind. – Phil

+0

Funktioniert nicht, T1 ist ein CTE. Ich verstehe nicht, dass es mich verrückt macht. Es funktioniert andersrum, ich verstehe es einfach nicht. – sridawg

Antwort

0
update t2 
set (t2.primary) = (select 'Y' from t1 where T1.CID = T2.CID AND T1.HID = T2.HID) 
+0

Danke, aber ich möchte wissen, warum die traditionelle beitreten funktioniert nicht Ich sagte bereits, ich habe es durch diese Problemumgehung – sridawg

+1

Beide Methoden funktionieren gut für mich: http://www.sqlfiddle.com/#!3/a98ce/9 – mellamokb

Verwandte Themen