Присоединитесь к таблицам и используйте коррелированный подзапрос, чтобы получить замену. Примечание. Я изменил ваши образцы данных.
drop table if exists tblparts,tblsust;
create table tblparts
(Code int, Stock int, StockReplace int);
insert into tblparts values
( 1 , 0 , 0),
( 2 , 5 , 0),
( 3 , 15 , 0),
( 11 , 10 , 0),
( 22 , 0 , 0),
( 33 , 0 , 0);
create Table TblSust
(Code int, `Replace` int);
insert into tblsust values
( 1 , 11),
( 11 , 1),
( 2 , 22),
( 22 , 2);
select p.code,p.stock,
coalesce(
(select p1.stock from tblparts p1 where p1.code = s.`replace`)
,0) r
from tblparts p
left join tblsust s on s.code = p.code
order by p.code
;
+------+-------+------+
| code | stock | r |
+------+-------+------+
| 1 | 0 | 10 |
| 2 | 5 | 0 |
| 3 | 15 | 0 |
| 11 | 10 | 0 |
| 22 | 0 | 5 |
| 33 | 0 | 0 |
+------+-------+------+
6 rows in set (0.001 sec)
replace - зарезервированное слово, поэтому здесь ставится обратная галочка.
Если есть многократные замены суммируют стоимость акций и затем присоединяются
create table tblparts
(Code int, Stock int, StockReplace int);
insert into tblparts values
( 1 , 0 , 0),
( 2 , 5 , 0),
( 3 , 15 , 0),
( 11 , 10 , 0),
( 15 , 2 , 0),
( 22 , 0 , 0),
( 33 , 0 , 0);
create Table TblSust
(Code int, `Replace` int);
insert into tblsust values
( 1 , 11),
( 11 , 1),
( 2 , 22),
( 22 , 2),
( 1 , 15);
select p.code,p.stock,
coalesce(
s.stockreplace
,0) r
from tblparts p
left join
(select s.code, sum(stock) stockreplace
from tblsust s
join tblparts p on s.`replace`= p.code
group by s.code
order by p.code
) s on p.code = s.code
;
+------+-------+------+
| code | stock | r |
+------+-------+------+
| 1 | 0 | 12 |
| 2 | 5 | 0 |
| 3 | 15 | 0 |
| 11 | 10 | 0 |
| 15 | 2 | 0 |
| 22 | 0 | 5 |
| 33 | 0 | 0 |
+------+-------+------+
7 rows in set (0.001 sec)