基于同一表中的字段更新表中的字段

时间:2011-03-01 01:06:35

标签: sql pervasive

全部

我希望从同一个表中的一行更新表格中的一行

我有一个名为INVENTORY的表。它存储产品的价格。 我有SALES代码,我有与之相关的STOCK代码。

我希望将所有PRICING从SALES代码转移到STOCK代码。

我希望做这样的事情:

update INVENTORY 
set PRICE = (SELECT PRICE WHERE CODE = "SALES CODE EQUIVALENT OF THE STOCK CODE IM IN")
WHERE 
CODE = "SOME STOCK CODE"

SALES CODE看起来像这个“U_12345”,它的STOCK代码相当于“S_12345”

感谢

2 个答案:

答案 0 :(得分:1)

你非常接近,你只需要指定你在子查询中选择哪个表...

update INVENTORY 
set PRICE = (SELECT PRICE FROM your_table WHERE CODE = "SALES CODE EQUIVALENT OF THE STOCK CODE IM IN")
WHERE 
CODE = "SOME STOCK CODE"


即使“your_table”是INVENTORY,您仍然需要在那里指定它。

唯一一次变得“棘手”的是当您从同一个表中选择要更新时,以及当您需要SELECT语句中更新记录的值时。在这种情况下,您需要使用别名来区分两个引用。例如......

update INVENTORY 
set PRICE = (SELECT PRICE FROM INVENTORY AS [new_price] WHERE [new_price].CODE = INVENTORY.NEW_CODE)
WHERE 
CODE = "SOME STOCK CODE"

答案 1 :(得分:0)

UPDATE INVENTORY
SET PRICE = i_sales.PRICE
FROM INVENTORY, INVENTORY i_sales
WHERE INVENTORY.CODE LIKE 'S\_%'
  AND i_sales.CODE = REPLACE(INVENTORY.Code, 'S', 'U')

这会更新INVENTORY中所有“库存”记录的价格,其价格来自相应的“销售”记录。

如果您希望更新单个价格,请将WHERE更改为以下内容:

WHERE i_stock.CODE = 'S_12345'

或者这个:

WHERE i_stock.CODE IN ('S_12345', 'S_12346')

注意:使用的FROM语法基于this doc页。