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。两者都是NULL。目标是将它们设置为此查询的结果,其中 ii.Price = pli.PRICE 和 ii.Sub_Total = (pli.PRICE * ii.Qty)。当然,我不想更新整个表,只是针对给定的 ii.Invoice_Id。我知道有一种从选择中进行插入的非常有用的方法,有没有办法通过更新来做到这一点?如果是这样,它看起来像什么?

4

1 回答 1

1

SQLite 中的update语句不支持joins。但是,您通常可以使用相关子查询来更新内容。以下可能是您正在寻找的内容:

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 回答