2013-11-06 2 views
0

Ниже приводится инструкция Обновление сервера MS SqlMySQL, используя из пункта в той же таблице

Update 
     HC_TranDetails 
SET 
     InsPayments = (SELECT IsNull(SUM(ISNULL(CreditAmount,0)),0) From HC_TranDetails TDS 
         Where TDS.TransactionType = 2 
         AND TDS.ClaimNo = TD.ClaimNo 
         AND TDS.LineItemNo = TD.LineItemNo 
         AND IsNull(TDS.InsPlanRowID,'') <> '' 
         AND TDS.ReverseEntry <> 1), 

     Adjustments = (SELECT IsNull(SUM(ISNULL(CreditAmount,0)),0) From HC_TranDetails TDS 
         Where TDS.TransactionType = 8 
         AND TDS.ClaimNo = TD.ClaimNo 
         AND TDS.LineItemNo = TD.LineItemNo 
         AND IsNull(TDS.InsPlanRowID,'') <> '' 
         AND TDS.ReverseEntry <> 1), 


FROM 
     HC_TranDetails TD 

Теперь я пытаюсь такое же заявление в MySQL следующим

UPDATE claimdetails SET balanceAmount = (SELECT IFNULL(SUM(IFNULL(debitamount,0)) - SUM(IFNULL(creditamount,0)),0) 
         FROM claimdetail CD WHERE CD.claimID = CDS.claimID) 

FROM ClaimDetail CDS 

Но он отображается как синтаксис Ошибка рядом с «From ClaimDetail CDS» по строке 4

ответ

1

MySQL брезжит об обновлениях в одной таблице. Легкое исправление заключается в том, чтобы включить дополнительный уровень подзапроса. Однако правильное исправление заключается в использовании соединения

UPDATE claimdetails join 
     (select claimid, IFNULL(SUM(IFNULL(debitamount,0)) - SUM(IFNULL(creditamount,0)),0) as val 
     from ClaimDetails 
     group by claimid 
     ) agg 
     on claimdetails.claimid = agg.claimid 
    SET balanceAmount = agg.val; 
1

Вы можете присоединиться к таблице, которую хотите обновить, с помощью подзапроса, который вычисляет баланс для каждого claimid с другой стороны.

Используя LEFT JOIN, он обновит все записи на таблице claimdetails. Значение 0 будет обновлено до любого несуществующего claimid в подзапросе.

UPDATE claimdetails a 
     LEFT JOIN 
     (
      SELECT claimID, 
        SUM(IFNULL(debitamount, 0)) - SUM(IFNULL(creditamount,0)) bal 
      FROM claimdetail 
      GROUP BY claimID 
     ) b ON a.claimID = b.claimID 
SET  a.balanceAmount = IFNULL(b.bal, 0) 
Смежные вопросы