Объедините два значения в две отдельные таблицы SQL - PullRequest
1 голос
/ 27 марта 2020

У меня есть две таблицы SQL, как показано ниже:

tblparts
----------------------------
Part          Quantity
----------------------------
AAA1000       1
AAB1000       2
AAC1000       3

И вторая с именем 'tblestparts':

tblestparts
----------------------------
ID      Part          Quantity
----------------------------
1       AAA1000       20
1       AAB1000       21
1       AAC1000       22
2       AAA1000       15

Я хочу добавить количество детали AAA1000, показанное в tblestparts передает количество, указанное в tblparts, где идентификатор в tblestparts = 1, и обновляет значение количества для детали AAA1000 в tblparts до этого объединенного числа.

Таким образом, в результате tblparts теперь выглядит так:

tblparts
----------------------------
Part          Quantity
----------------------------
AAA1000       21
AAB1000       2
AAC1000       3

Я сделал это несколько раз, и придумал следующее, но, увы, это не работает, и я не знаю, где я иду не так?

UPDATE tblparts SET tblparts.Quantity = tblparts.Quantity + tblestparts.Quantity FROM tblparts INNER JOIN tblestparts ON tblestparts.Part = tblparts.Part WHERE tblparts.Part = 'AAA1000' AND tblestparts.ID = 1

Спасибо за любые советы заранее!

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Когда вы говорите, не работает, что вы имеете в виду? Если предположить, что это SQL Server - T-SQL, то, что вы делаете, выглядит правильно.

Таким образом, чтобы преобразовать ваш сценарий в использование переменных таблицы, отсюда и префикс @ в именах таблиц - ie this является переменной, то следующее дает вам то, что вы хотите:

setup

declare @tblparts table
(
      part varchar(100)
    , quantity int
);

declare @tblestparts table
(
      id int
    , part varchar(100)
    , quantity int
);

insert into @tblparts
values 
('AAA1000', 1),
('AAB1000', 2),
('AAC1000', 3)

insert into @tblestparts
values
(1,       'AAA1000',       20),
(1,       'AAB1000',       21),
(1,       'AAC1000',       22),
(2,       'AAA1000',       15)

update

UPDATE t 
SET t.Quantity = t.Quantity + st.Quantity 
FROM @tblparts t 
INNER JOIN @tblestparts st ON st.Part = t.Part 
WHERE t.Part = 'AAA1000' AND st.ID = 1

Все, что я здесь сделал, изменил ваш запрос на используйте псевдонимы для простоты. Кроме того, вам не нужно AND st.ID = 1 здесь.

результат

Следующий запрос:

select *
from @tblparts

дает следующие результаты:

AAA1000 21  
AAB1000 2  
AAC1000 3   

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

1 голос
/ 27 марта 2020

Во многих базах данных может работать коррелированный подзапрос. Предполагая, что в исходной таблице всегда есть совпадение:

update tblparts p
set quantity = quantity + (select e.quantity from tblestparts e where e.part = p.part)
...