【问题标题】:convert a select into an update将选择转换为更新
【发布时间】:2013-08-06 02:03:51
【问题描述】:

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

【问题讨论】:

    标签: sql sqlite sql-update


    【解决方案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
                        );
    

    【讨论】:

    • 谢谢,但我问这个问题做得很差。我只是回去编辑我的问题以更准确。如果您能再看一眼,我将不胜感激!
    猜你喜欢
    • 2014-01-05
    • 2013-09-29
    • 2020-04-03
    • 2018-01-22
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多