Обновление SQL из выбора - PullRequest
       11

Обновление SQL из выбора

1 голос
/ 04 декабря 2009

Я хочу обновить два поля таблицы (Store) из набора других таблиц, но я не знаю, как я могу это сделать. Система SQL находится в AS / 400, поэтому не имеет уловок SQL Server или Oracle: (

Вот SELECT, я хочу цену и сумму заказа (объединение таблиц товаров для выбора только существующих товаров)

SELECT OrderDetails.Price, OrderDetails.Amount
FROM (OrderHeader JOIN OrderDetails ON OrderHeader.Number = OrderDetails.Number)
JOIN Articles ON Article.Reference = OrderDetails.Article
WHERE OrderHeader.Store = '074'
AND   OrderHeader.Date = '2009-12-04'
AND   OrderHeader.Number = 26485

А вот UPDATE, я хочу обновить цену и количество каждой статьи с последнего SELECT

UPDATE Store
SET Store.Price = *****OrderDetails.Price*****
, Store.Amount = Store.Amount + *****OrderDetails.Amount*****
... ????

Спасибо за помощь и простите мой английский Тарзана;)

Ответы [ 2 ]

0 голосов
/ 24 июня 2011

Я считаю, что это должно работать:

UPDATE Store as ST (Price, Amount) = (SELECT OD.Price, ST.Amount + OD.Amount
                                      FROM OrderHeader as OH
                                      JOIN OrderDetails as OD
                                      ON OH.Number = OD.Number
                                      JOIN Articles as A
                                      ON A.Reference = OD.Article
                                      WHERE OH.Store = ST.Store
                                      AND OH.Date = '2009-12-04'
                                      AND OH.Number = 26485)
WHERE ST.Store = '074'
      AND EXISTS (SELECT '1'
                  FROM OrderHeader as OH
                  JOIN OrderDetails as OD
                  ON OH.Number = OD.Number
                  JOIN Articles as A
                  ON A.Reference = OD.Article
                  WHERE OH.Store = ST.Store
                  AND OH.Date = '2009-12-04'
                  AND OH.Number = 26485)

WHERE EXISTS предназначен для предотвращения результатов NULL. Я предполагаю, что Store имеет столбец id, чтобы соответствовать.
Это будет работать только в том случае, если таблицы вернут одну (и только одну) строку для заданных критериев выбора. Если это не так, вам нужно будет предоставить более подробную информацию.

0 голосов
/ 04 декабря 2009

Если у вас есть драйверы, вы можете выполнить это обновление через Запрос связанного сервера , т. Е. SQL Server может добавить AS / 400 в качестве связанного сервера и выполнить обновление файла, у нас есть AS400 с DB2, мы обычно выполняем обновление через хранимые процедуры SQL Server, но вам нужно сначала выбрать Select, а затем запустить обновление (это зависит от поставщика - IBM AS / 400 с DB2 и SQL 05)

Declare @tmpSql nvarchar(1000);
Declare @baseSql nvarchar(1000);

-- Select 
Set @tmpsql = '''Select * From MyAs400Library.file1 where Field1=''''' + @somevariable + ''''' and Field2='+ @someothervariable + ''''

Set @baseSql = 'Update OpenQuery(LINKEDSERVERNAME,' + @tmpSql + ')'

Set @baseSql = @baseSql + ' SET Field3='''+ @somevariable + ''' where Field1=''' + @somevariable + ''' and Field2='+ @someothervariable + ''

exec sp_executesql @baseSql

Итак, вы делаете SELECT, а затем обновляете ...

Не знаю, подходит ли вам связанный сервер, но это один из способов.

...