将选择转换为更新

时间:2013-08-06 02:03:52

标签: sql sqlite sql-update

我正在使用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。我知道从select中进行插入有一种非常有用的方法,有没有办法通过更新来做到这一点?如果是这样,它看起来像什么?

1 个答案:

答案 0 :(得分:1)

SQLite中的update语句不支持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
                    );