kashamalasha
@kashamalasha

Как ограничить выборку данных по EXISTS в таблице без ключей?

Затупил, помогите.
Есть две таблицы:
CREATE TABLE tab_a (
    id    INTEGER
);
CREATE TABLE tab_b (
    id    INTEGER
    changes   BIT
);


Есть следующее наполнение:
tab_a:
 id
---
  1
  2
  4

tab_b:
 id| mode
----------
  1|    0
  1|    1
  2|    0
  3|    1


Если в таблице tab_a есть запись, то выборка должна выглядеть так:
result:
 id| mode
----------
  1|    0

если нет:
result:
 id| mode
----------
  1|    1


В приведенном примере результат должен выглядеть так:
result:
 id| mode
----------
  1|    0
  2|    0
  3|    1
  4|    0


Состояние флага бинарно. Подскажите, как правильно выбрать данные. Для выборки отсутствующих в первой таблице строк можно использовать левое соединение, но в этом случае в результирующую выборку попадают записи с двумя состояниями из второй таблицы. Понимаю, что необходимо ограничивать выборку по exists, не могу допереть, как это правильно сделать.
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 1
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
select id, 0
from tab_a
where exists (select 1 from tab_b where tab_b.id=tab_a.id)
union all
select id, 1
from tab_b
where not exists (select 1 from tab_a where tab_b.id=tab_a.id)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы