2009-06-28 119 views
0

此SQL查詢未執行。有人可以給出正確的語法嗎?SQL更新查詢

UPDATE PayrollTotals ptm 
    SET PTAmount = PTAmount + 
    (SELECT pts.PTAmount FROM PayrollTotals pts WHERE pts.PTACID = 38 
     AND pts.PTAmount > 0 
     AND pts.PTEmpID= ptm.PTEmpID) 
WHERE PTACID = 42 

我想更新類型42種38在PTEmpID比賽。還總計PTAmount

編輯:每個PTEmpID總是會有38行和42行。所以我只是想添加38到42,其中PTEmpID匹配。整個表是。

+0

你能澄清彙總部分嗎?或許有一個例子。 – akf 2009-06-28 04:08:44

回答

3

三個問題與此查詢:

  • 如果有對相關子查詢沒有結果,則返回NULL,它不能添加到PTAmount。
  • 如果子查詢有多個結果,則它也將無法添加,因爲只能從括號中的子查詢返回一個值。
  • 您不能別名 UPDATE關鍵字旁邊的UPDATE表。你需要一個FROM子句,在SET之後,給它一個「ptm」別名。

試試這個:

UPDATE PayrollTotals SET PTAmount = PTAmount + 
    (SELECT SUM(pts.PTAmount) FROM PayrollTotals pts WHERE 
    pts.PTACID = 38 
    AND pts.PTAmount > 0 
    AND pts.PTEmpID = ptm.PTEmpID) 
FROM 
    PayrollTotals AS ptm 
WHERE 
    PTACID = 42 

的SUM(),將確保你從子查詢中至少拿到一個0的結果,如果有多個結果,將其添加到之前它們求和ptm.PTAmount。

另外,您並不需要表別名。由於子查詢的PayrollTotals的別名是點,你可以通過它的名字指的是更新後的表直接:「還總結PTAmount」

UPDATE PayrollTotals SET PTAmount = PTAmount + 
    (SELECT SUM(pts.PTAmount) FROM PayrollTotals pts WHERE 
    pts.PTACID = 38 
    AND pts.PTAmount > 0 
    AND pts.PTEmpID = PayrollTotals.PTEmpID) 
WHERE 
    PTACID = 42 
+0

那也不執行? – Malcolm 2009-06-28 04:13:28