我有一张桌子,我想从同一张桌子过滤结果。这是一个样本。
STUDENT_ID | SCHOOL_YEAR |
-----------+-------------+
747 | 20122013 |
747 | 20132014 |
748 | 20122013 |
749 | 20122013 |
749 | 20132014 |
750 | 20122013 |
751 | 20112012 |
我想对表格进行排序,以便仅显示具有20122013学年但没有20132014学年的student_id。
所以结果是
STUDENT_ID |
-----------+
748 |
750 |
我尝试了UNION和LEFT / RIGHT JOIN,但是没有运气。
请帮忙。谢谢。
最佳答案
减号是简单的方法:
select student_id
from tbl
where school_year = '20122013'
minus
select student_id
from tbl
where school_year = '20132014';
STUDENT_ID
----------
748
750
您也可以使用“反联接”来执行此操作:
select a.student_id
from tbl a
left outer join tbl b
on a.student_id = b.student_id
and b.school_year = '20132014'
where
a.school_year = '20122013'
and b.student_id is null;
STUDENT_ID
----------
750
748
使用反联接,您将外部联接表的第二个副本(在此示例中为“ b”),然后过滤该集合中的行不匹配的地方(b.student_id为null)。