Вы не можете. Но вы можете объединять обе таблицы, а затем выберите значение, которое вы хотите в пункте select
:
SELECT A.id, A.flag,
(case when coalesce(A.flag, 0) = 0 then b.fname else c.fname end) as fname,
(case when coalesce(A.flag, 0) = 0 then B.lname else c.lname end) as lname
FROM Table1 A left outer join
Table2 B
on B.id = A.id left outer join
Table3 C
on c.id = A.id
Это будет производить дополнительные строки, если есть несколько строк в Table2 или Table3 для любых идентификаторов.
Подобно тому, как альтернатива, которая, как правило, быть менее эффективным, вы также можете сделать:
select a.id, a.flag,
MAX(case when coalesce(A.flag, 0) = 0 and which = 'b' or
coalesce(A.flag, 0) <> 0 and which = 'c'
then b.fname
end) as fname,
MAX(case when coalesce(A.flag, 0) = 0 and which = 'b' or
coalesce(A.flag, 0) <> 0 and which = 'c'
then b.lname
end) as lname
from table1 A left outer join
((select b.*, 'b' as which from table2 b)
union all
(select c.*, 'c' as which from table3 c)
) b
group by a.id, a.flag
group by
устранит нежелательные дубликаты.
Вы будете нуждаться в какой-то динамический SQL здесь. – Kermit