SQL:如果显示相关记录,则返回true / false

时间:2019-05-09 14:24:49

标签: sql oracle

我有两个表:

ASSIGNMENTS (ID)
ASSIGNMENT_REVIEWS (ID, ASSIGNMENT_ID)

作为选择的结果,如果您已经对作业进行了评论,我想检索一个标志。如何以最佳方式做到这一点?

2 个答案:

答案 0 :(得分:2)

您正在寻找存在声明:

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

答案 1 :(得分:1)

  

您可以将left joinnvl2()函数一起使用(   如果第一个参数为2nd argumentnot 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

Demo