Как насчет union
?
select id, val
from a
union -- on purpose to remove duplicates
select id, val
from b
union
select id, val
from c;
Это удаляет дубликаты.
Если значение val может измениться, и вы хотите получить значение из «первой» таблицы, то вы можете проверить наличие что:
select id, val
from a
union all
select id, val
from b
where not exists (select 1 from b where b.id = a.id)
union all
select id, val
from c
where not exists (select 1 from a where c.id = a.id) and
not exists (select 1 from b where c.id = b.id);
Если на id
есть индекс (скажем, это первичный ключ), то это может быть быстрее, чем в первой версии, использующей union
.