1

私は SQLite を使用しています。次の select ステートメントを作成しました。これにより、必要な結果が得られます。必要な場所に結果を取得する方法は次のとおりです。

SELECT 
  ii.Invoice_Item_Id,
  pli.PRICE,
  (pli.PRICE * ii.Qty) AS Sub_Total
FROM
  Invoice_Item ii
  LEFT OUTER JOIN CS_PRICE_LIST_ITEM pli ON (ii.Product_Id = pli.Product_Id)
  AND (pli.EVENT_PRICE_LIST_ID = 2)
WHERE
  ii.Invoice_Id = ?

Invoice_Item テーブルには、ii.Price、ii.Sub_Total の 2 つの列があります。どちらも NULL です。目標は、ii.Price = pli.PRICE および ii.Sub_Total = (pli.PRICE * ii.Qty) であるこのクエリの結果にそれらを設定することです。もちろん、指定された ii.Invoice_Id についてだけ、テーブル全体を更新したくはありません。選択から挿入を行う非常に便利な方法があることは知っていますが、更新でそれを行う方法はありますか? もしそうなら、それはどのように見えますか?

4

1 に答える 1

1

SQLiteのupdateステートメントは s をサポートしていませんjoin。ただし、相関サブクエリを使用して更新できることがよくあります。以下はあなたが探しているものかもしれません:

update InvoiceItem
    set Sub_Total = (select coalesce(ii.Sub_Total, coalesce(ii.Price, pli.PRICE) * ii.Qty) 
                     FROM Invoice_Item ii LEFT OUTER JOIN
                          CS_PRICE_LIST_ITEM pli
                          ON ii.Product_Id = pli.Product_Id and
                             pli.EVENT_PRICE_LIST_ID = 2
                     WHERE ii.Invoice_Id = InvoiceItem.Invoice_Id
                    );
于 2013-08-06T02:16:07.940 に答える