2017-01-23 6 views
1

Ich versuche, eine bestimmte Spalte in meiner DB (mit MSSQL)SQL Update & INNER JOIN

ich eine Abfrage haben zu aktualisieren schrieb bereits die Werte zurück, aber das Problem, das ich die andere Tabelle nicht aktualisieren mit den generierten Werten von (Mehr als eine Zeile) habe ich versucht, eine Variable zu verwenden, um sie zu deklarieren und dann die Tabelle zu aktualisieren, aber das Problem gibt mehr als einen Wert zurück, also frage ich mich, wie ich die Tabelle mit diesen Werten aktualisieren kann.

Meine Auswahlabfrage:

SELECT SUM(_Items.MagParam1) + SUM(_Items.MagParam2) AS Test11 
FROM _Char 
INNER JOIN _Inventory 
    ON _Char.CharID = _Inventory.CharID 
INNER JOIN _Items 
    ON _Inventory.ItemID = _Items.ID64 
WHERE _Inventory.Slot BETWEEN 1 AND 13 AND _Inventory.ItemID > 0 
GROUP BY [_Char].[CharName16],[_Char].[CurLevel],[_Char].[CharID] 

Also diese Abfrage gibt einen Wert für jede CharID ich habe, möchte ich damit alle Zeilen in _Char aktualisieren ist generierten Wert aus der vorherigen Abfrage.

Vielen Dank im Voraus =)

Antwort

1

Unter der Annahme, CharId einzigartig ist, würde ich so etwas tun:

update c 
    ? = cc.test11 -- ? is the column to be updated 
    from _Char c JOIN 
     (SELECT c.CharID, SUM(i.MagParam1) + SUM(i.MagParam2) AS Test11 
      FROM _Char c INNER JOIN 
       _Inventory i 
       ON c.CharID = i.CharID INNER JOIN 
       _Items it 
       ON i.ItemID = it.ID64 
      WHERE i.Slot BETWEEN 1 AND 13 AND i.ItemID > 0 
      GROUP BY c.CharID 
     ) cc 
     ON c.CharID = cc.CharID; 

Wenn Sie verlangen, dass alle drei Säulen (CharName16, CurLevel und CharID) eine einzigartige Reihe zu definieren, , dann schließen Sie sie in die SELECT, GROUP BY und ON Klauseln ein.

+0

Nein, ich brauche nur die CharID. Versuchen Sie jedoch, diese Abfrage auszuführen. – Crepitus

+0

Arbeitete wie ein Zauber, du hast mich gerettet ... Vielen Dank <3 – Crepitus