Обновление поля в таблице на основе поля в той же таблице - PullRequest
2 голосов
/ 01 марта 2011

ПРИВЕТ ВСЕМ

Я хочу обновить строку в моей таблице из строки в той же таблице,

У меня есть таблица с именем INVENTORY. в нем хранятся ЦЕНЫ на продукцию. У меня есть коды ПРОДАЖ и у меня есть STOCK коды, которые связаны между собой.

Я хочу перенести все ЦЕНЫ из кодов ПРОДАЖ в коды СТОК.

Я хочу сделать что-то вроде этого:

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

КОД ПРОДАЖ будет выглядеть так: «U_12345», его эквивалент кода STOCK будет выглядеть как «S_12345»

спасибо

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Вы очень близки, вам просто нужно указать, какую таблицу вы выбираете, как часть вашего подзапроса ...

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"


Evenесли "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"
0 голосов
/ 01 марта 2011
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 основан на этой странице документа.

...