Обновите запрос несколькими соединениями между таблицами и предложением where

#sql-server #tsql #join #sql-update

#sql-сервер #tsql #Присоединиться #sql-обновление

Вопрос:

У меня есть следующие отношения в MSSQL DB: введите описание изображения здесь

Я хочу создать запрос НА ОБНОВЛЕНИЕ, где я могу отфильтровать значения первой таблицы. Пример выглядит следующим образом:

Я хочу получить все продукты из Inv_Transaction_Lines_Table, где Document_No из первой таблицы (Gen_Documents_Table_1) равно ‘3250824’, а состояние ‘Released’

Запрос SELECT очень прост:

 SELECT        dbo.Inv_Transaction_Lines_Table.*, dbo.Inv_Transaction_Lines_Table.Product_Id AS Expr1, dbo.Gen_Documents_Table.Document_No, dbo.Inv_Transaction_Lines_Table.Quantity_Base AS Expr2
FROM            dbo.Gen_Documents_Table AS Gen_Documents_Table_1 RIGHT OUTER JOIN
                         dbo.Inv_Transactions_Table RIGHT OUTER JOIN
                         dbo.Inv_Transaction_Lines_Table ON dbo.Inv_Transactions_Table.Transaction_Id = dbo.Inv_Transaction_Lines_Table.Transaction_Id ON 
                         Gen_Documents_Table_1.Id = dbo.Inv_Transactions_Table.Document_Id LEFT OUTER JOIN
                         dbo.Gen_Documents_Table ON Gen_Documents_Table_1.Master_Document_Id = dbo.Gen_Documents_Table.Id
WHERE        (Gen_Documents_Table_1.State = N'30') AND (dbo.Gen_Documents_Table.Document_No = N'3250824')
  

но я не могу справиться с запросом на ОБНОВЛЕНИЕ.

Спасибо!

Ответ №1:

если ваш запрос для select правильный, вы можете использовать обновление для того же запроса для select .например, если вы хотите обновить quantity_base :

 update Inv_Transaction_Lines_Table set quantity_base = 'A'
FROM            dbo.Gen_Documents_Table AS Gen_Documents_Table_1 RIGHT OUTER JOIN
                         dbo.Inv_Transactions_Table RIGHT OUTER JOIN
                         dbo.Inv_Transaction_Lines_Table ON dbo.Inv_Transactions_Table.Transaction_Id = dbo.Inv_Transaction_Lines_Table.Transaction_Id ON 
                         Gen_Documents_Table_1.Id = dbo.Inv_Transactions_Table.Document_Id LEFT OUTER JOIN
                         dbo.Gen_Documents_Table ON Gen_Documents_Table_1.Master_Document_Id = dbo.Gen_Documents_Table.Id
WHERE        (Gen_Documents_Table_1.State = N'30') AND (dbo.Gen_Documents_Table.Document_No = N'3250824')