2015-12-14 3 views
1

Я создал две таблицы temp. Один с Заказом, который содержит статью и количество, а другой - с доступностью, где у нас также есть Артикул и Количество. Я хотел бы написать запрос с несколькими обновлениями с указанием количества заказов на сортировку со склада и от себя для всех статей во временной таблице с помощью ордеров. Насколько я знаю, невозможно изменить два поля из разных таблиц в одном запросе обновления.Многопользовательский запрос на обновление

Я пробовал что-то подобное, но это, конечно, не работает.

UPDATE #Stocks as s 
    INNER JOIN #Orders as o on o.ArticleId=s.ArticleId 
SET 
    s.Quantity = (s.Quantity - o.Quanity) 

FROM 
    #Stocks s 
    JOIN #Orders o on o.ArticleId=s.ArticleId 
WHERE 
    #Stocks.ArticleId IN (SELECT ArticleId FROM #Orders) 
+1

Возможный дубликат [Как обновить двух таблиц в одном операторе в SQL Server 2005?] (http://stackoverflow.com/questions/2044467/how- к деятельности date-two-tables-in-one-statement-in-sql-server-2005). Короче говоря, вам, вероятно, потребуется сделать два обновления с использованием транзакции. – gmiley

ответ

1

Как насчет этого?

UPDATE s 
    SET s.Quantity = (s.Quantity - o.Quanity) 
    FROM #Stocks as s 
    INNER JOIN #Orders as o on o.ArticleId=s.ArticleId 
1

Для обновления двух таблиц с использованием одного запроса вы должны создать представление, содержащее оба столбца таблицы, а затем обновить это представление.

+1

Зачем нужно сначала создавать представление? – Lamak

+0

@Lamak Так как обновление двух таблиц в одном запросе невозможно без этого. –

+0

Это было мое понимание вопроса, ассер, кажется, хочет обновить два поля в разных таблицах в одном запросе.Хотя это может сработать, вместо создания объекта базы данных просто переносите два обновления в транзакцию, если это не мешает этому. – gmiley

3

Когда вы используете update, используя join с несколькими совпадениями, для update выбран только один произвольный ряд. Ключевая идея заключается в том, чтобы объединить данные перед тем обновление:

UPDATE s 
    SET Quantity = (s.Quantity - o.Quanity) 
    FROM #Stocks s JOIN 
     (SELECT o.ArticleId, SUM(o.Quantity) as quantity 
      FROM #Orders o 
      GROUP BY o.ArticleId 
     ) o 
     ON o.ArticleId = s.ArticleId; 

Ваше заявление способ чрезмерно сложным, смешивая update синтаксис с SQL Server, MySQL и Postgres. Кроме того, предложение WHERE не требуется, потому что JOIN выполняет фильтрацию. Однако даже после исправления синтаксических ошибок у вас все еще будет проблема вычисления неверных результатов, если вы не предварительно агрегируете данные.

К сожалению, описание этого поведения похоронено глубоко в documentation первого примера на update страницы:

В предыдущем примере предполагается, что только одна продажи записывается для указанного продавца на определенном дата и обновления. Если в тот же день в может быть записано более одной продажи для определенного продавца, приведенный пример не работает правильно. Пример работает без ошибок, но каждое значение SalesYTD обновляется только с одной продажей , независимо от того, сколько продаж фактически произошло в этот день. Этот объясняется тем, что один оператор UPDATE никогда не обновляет одну и ту же строку два раз. [курсив]

0

Ваш вопрос все о Мульти Update, но Updation выполнять в одной таблице на основе другой таблицы так для этого используйте join

Но если Updation выполнить в двух или более таблицы мы должны создать вид, то мы можем обновить

благодаря

Смежные вопросы