2013-07-17 6 views
1

У меня есть этот оператор select, ниже которого я хотел бы использовать, чтобы обновить количество продуктов в другой таблице, tablex. Я не могу понять, как сопоставить номер продукта из этого запроса с таблицей productnumber tablex, а затем добавить количество, найденное в этом выражении, в существующее количество в таблицеx.Обновить таблицу на основе выбора из другого

select 
    p.ProductNumber, sod.Quantity ,so.StateCode 
from 
    SalesOrderDetail sod 
right join 
    ProductAssociation pa on sod.ProductId = pa.ProductId 
left join 
    Product p on pa.AssociatedProduct = p.ProductId 
left join 
    SalesOrder so on so.SalesOrderId = sod.SalesOrderId 
where 
    so.StateCode = '3' 

ответ

0

Вы можете иметь обновление базы на несколько таблиц, синтаксис что-то вроде

update tablex 
set tablex.quantity = sod.Quantity 
from tablex join product p on tablex.productnumber = p.ProductNumber 
join... -- add the rest of your joins and conditions. 
0

Вы ищете это?

UPDATE tx SET tx.Quantity = tx.Quantity + sod.Quantity FROM 
from SalesOrderDetail sod 
right join ProductAssociation pa on sod.ProductId=pa.ProductId 
left join Product p on pa.AssociatedProduct=p.ProductId 
left join SalesOrder so on so.SalesOrderId=sod.SalesOrderId 
left join tablex tx on p.ProductNumer = tx.ProductNumber 
where so.StateCode='3' 

How can I do an UPDATE statement with JOIN in SQL?

0

Основной синтаксис для UPDATE с JOIN:

UPDATE A 
SET A.foo = B.bar 
FROM TableA A 
JOIN TableB B 
    ON A.col1 = B.colx 

Так что я считаю, что вы после того, как что-то вроде:

UPDATE A 
SET A.Quantity = B.Quantity + A.Quantity 
FROM Tablex A 
JOIN (select p.ProductNumber, sod.Quantity ,so.StateCode 
     from SalesOrderDetail sod 
     right join ProductAssociation pa on sod.ProductId=pa.ProductId 
     left join Product p on pa.AssociatedProduct=p.ProductId 
     left join SalesOrder so on so.SalesOrderId=sod.SalesOrderId 
     where so.StateCode='3' 
    )B 
    ON A.ProductNumber = B.ProductNumber 

Не знаете, как ваши факторы StateCode дополнительно,Возможно, 210 критериев?

+0

Это заменит и не обновлять/добавлять quantity..I думаю, что это должно быть 'A.Quantity = A.Quantity + B.Quantity' –

+0

Ах, хорошая точка, не видел это в вопросе, обновленный. –

0

Я предполагаю, что вы пытаетесь обновить большое количество строк в TableX, поэтому я собираюсь предложить способ сделать их все одновременно, а не один за раз.

update TableX 
set quantity = quantity + 
(select sod.quantity from SalesOrderDetail where sod.ProductId = TableX.ProductId) 

Вы можете захотеть сделать это на подмножестве SalesOrderDetail, и это нормально, просто используйте предложение WHERE для этого.

0

Попробуйте

UPDATE tablex 
SET Quantity= Quantity + 
(SELECT sod.Quantity FROM SalesOrderDetail sod 
RIGHT JOIN ProductAssociation pa ON sod.ProductId=pa.ProductId 
LEFT JOIN Product p ON pa.AssociatedProduct=p.ProductId 
LEFT JOIN SalesOrder so ON so.SalesOrderId=sod.SalesOrderId 
WHERE so.StateCode='3' AND p.ProductNumber=Tablex.productnumber) 
Смежные вопросы