我有一张桌子,我想从同一张桌子过滤结果。这是一个样本。

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)。

07-28 08:39