1

我在下面有这个选择语句,我想用它来更新另一个表中的产品数量,tablex. 我似乎无法弄清楚如何将此查询中的产品编号与 productnumber tablex 匹配,然后将此语句中找到的数量添加到 tablex 中的现有数量。

select 
    p.ProductNumber, sod.Quantity ,so.StateCode
from 
    SalesOrderDetail sod
right join 
    ProductAssociation pa on sod.ProductId = pa.ProductId
left join 
    Product p on pa.AssociatedProduct = p.ProductId
left join 
    SalesOrder so on so.SalesOrderId = sod.SalesOrderId
where 
    so.StateCode = '3'
4

5 回答 5

0

您可以基于多个表进行更新,语法类似于

update tablex
set tablex.quantity = sod.Quantity
from tablex join product p on tablex.productnumber = p.ProductNumber
join... -- add the rest of your joins and conditions.
于 2013-07-17T20:15:54.553 回答
0

你在找这个吗?

UPDATE tx SET tx.Quantity = tx.Quantity + sod.Quantity FROM 
from SalesOrderDetail sod
right join ProductAssociation pa on sod.ProductId=pa.ProductId
left join Product p on pa.AssociatedProduct=p.ProductId
left join SalesOrder so on so.SalesOrderId=sod.SalesOrderId
left join tablex tx on p.ProductNumer = tx.ProductNumber
where so.StateCode='3'

如何在 SQL 中使用 JOIN 执行 UPDATE 语句?

于 2013-07-17T20:16:04.207 回答
0

UPDATEwith a 的基本语法JOIN

UPDATE A
SET A.foo = B.bar
FROM TableA A
JOIN TableB B 
    ON A.col1 = B.colx

所以我相信你追求的是:

UPDATE A
SET A.Quantity = B.Quantity + A.Quantity
FROM Tablex A
JOIN (select p.ProductNumber, sod.Quantity ,so.StateCode
      from SalesOrderDetail sod
      right join ProductAssociation pa on sod.ProductId=pa.ProductId
      left join Product p on pa.AssociatedProduct=p.ProductId
      left join SalesOrder so on so.SalesOrderId=sod.SalesOrderId
      where so.StateCode='3'
      )B
   ON A.ProductNumber = B.ProductNumber

不确定您的 StateCode 如何考虑其他JOIN标准?

于 2013-07-17T20:16:21.430 回答
0

我猜您正在尝试更新大量行,TableX因此我将建议一种方法来一次完成所有操作,而不是一次完成。

update TableX
 set quantity = quantity +
 (select sod.quantity from SalesOrderDetail where sod.ProductId = TableX.ProductId)

您可能希望在 的子集上执行此操作SalesOrderDetail,这很好,只需使用该WHERE子句即可。

于 2013-07-17T20:17:32.263 回答
0

尝试

UPDATE tablex
SET Quantity= Quantity +
(SELECT sod.Quantity  FROM SalesOrderDetail sod
RIGHT JOIN ProductAssociation pa ON sod.ProductId=pa.ProductId
LEFT JOIN Product p ON pa.AssociatedProduct=p.ProductId
LEFT JOIN SalesOrder so ON so.SalesOrderId=sod.SalesOrderId
WHERE so.StateCode='3' AND p.ProductNumber=Tablex.productnumber)
于 2013-07-17T20:19:45.100 回答