できません。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
これにより、任意の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
不要な重複を排除します。