SQL: вернуть true / false, если представлена ​​связанная запись - PullRequest
2 голосов
/ 09 мая 2019

У меня есть две таблицы:

ASSIGNMENTS (ID)
ASSIGNMENT_REVIEWS (ID, ASSIGNMENT_ID)

В результате выбора я хотел бы получить флаг, если для назначения уже представлен отзыв. Как это сделать наилучшим образом?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вы можете использовать left join с функцией nvl2() ( возвращает значение в 2nd argument, если 1-й аргумент not null, otherwise возвращает 3rd argument практически )

with assignments(id) as
(
 select 101 from dual union all
 select 102 from dual
), assignments_reviews(id,assignment_id) as
(
 select 855, 101 from dual 
)
select a.id, 
       nvl2(r.assignment_id,1,0) as already_presented
  from assignments a
  left join assignments_reviews r
    on r.assignment_id = a.id;

ID  ALREADY_PRESENTED
101 1
102 0

Демо

1 голос
/ 09 мая 2019

Вы ищете утверждение о существовании:

select 
    id,
    case when exists (
        select 1 from assignment_reviews where assignment_reviews.assignment_id = assignments.id
    ) then 1 else 0 end as hasReview
from
    assignments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...