WHERE
table_three.part_code IN(
^^
Редактировать
Вот несколько альтернатив, которые удовлетворяют: Поместите все строки в таблице 3 так, чтобы код детали существовал либо в таблице 1, либо в таблице 2 .
select t3.part_code
,t3.name
from table_three t3
where part_code in(select t1.part_code from table_one t1)
or part_code in(select t2.part_code from table_two t2);
Производный стол с объединением
select t3.part_code
,t3.name
from table_three t3
join (select part_code from table_one
union
select part_code from table_two
) t12
on(t3.part_code = t12.part_code);
Внутреннее соединение с союзом
select t3.part_code
,t3.name
from table_three t3
join table_one t1 on(t3.part_code = t1.part_code)
union
select t3.part_code
,t3.name
from table_three t3
join table_two t2 on(t3.part_code = t2.part_code);
Бонус. Понятия не имею, почему я это сделал.
select t3.part_code
,t3.name
from table_three t3
left join (select distinct part_code
from table_one) t1 on(t3.part_code = t1.part_code)
left join (select distinct part_code
from table_two) t2 on(t3.part_code = t2.part_code)
where t3.part_code = t1.part_code
or t3.part_code = t2.part_code;
Дайте мне знать, как они работают.
Редактировать 2.
Хорошо, попробуйте следующее. Он должен произвести объединение таблиц T1 и T2. Затем для каждой строки будет выбрано имя из T3, если такой код детали будет найден.
Если part_code является ключом во всех таблицах, вы можете вместо этого сделать UNION ALL
.
select T12.part_code
,coalesce(T3.name, T12.name) as name
from (select part_code, name from table_one T1 union
select part_code, name from table_two T2
) T12
left join table_three T3 on(T1.part_code = T3.part_code);