Я почти уверен, что ваше описание не то, что вы действительно хотите.
Я думаю, что вы действительно хотите флаг, который, когда 1
, возвращает строки в Table1
, которые находятся в Table2
;и когда 0
возвращает строки в Table1
, которых нет в Table2
.
Один явный метод использует exists
/ not exists
:
Select a.*
from Table1 a
where (flag = 1 and
exists (select 1 from Table2 b where b.id = a.id)
) or
(flag <> 1 and
not exists (select 1 from Table2 b where b.id = a.id)
);
То естькогда flag = 1
, тогда получите строки в Table1
, чьи идентификаторы в Table2
.Если flag <> 1
, то получить строки в Table1
, чьи идентификаторы НЕ в Table2
.
Вы также можете реализовать эту версию логики, используя предложения LEFT JOIN
и WHERE
:
Select a.*
from Table1 a left join
Table2 b
on a.id = b.id
where (flag = 1 and b.id is not null) or
(flag <> 1 and b.id is null);