SQL从同一个表中选择

SQL从同一个表中选择,sql,oracle,Sql,Oracle,我有一张这样的桌子: 我想写一个查询,只输出2000年和2001年发生的记录 在这种情况下,输出将是 Bb 2000 Bb 2001 因为只有名为Bb的记录在这两个年份都发生过 我尝试过子查询和联接,但没有成功,因为这两列既不是主键也不是外键 谢谢。您可以使用intersect来执行此操作 select x.name, x.year from ( select name from table where year = 2000 intersect select name from table

我有一张这样的桌子:

我想写一个查询,只输出2000年和2001年发生的记录

在这种情况下,输出将是

Bb 2000
Bb 2001
因为只有名为Bb的记录在这两个年份都发生过

我尝试过子查询和联接,但没有成功,因为这两列既不是主键也不是外键


谢谢。

您可以使用
intersect
来执行此操作

select x.name, x.year from
(
select name from table where year = 2000
intersect
select name from table where year = 2001
) t join table x on t.name = x.name
我的表格只能在
year
列中包含
2000
2001
。没有其他年份会出现。但是,如果可以为
year
设置其他值,那么我希望为同一
name
获取超过一年的记录

如果您曾经需要处理您评论中描述的其他年份,那么我将使用以下查询:

select id, name, year
  from (select id, name, year,
               count(distinct year) over (partition by name) as distinct_year_cnt
          from table_name)
 where distinct_year_cnt > 1

如果
Bb
碰巧也有
2005
的记录,您希望它也返回,还是只返回
2000/2001
记录?或者,那条额外的
2005
记录实际上会取消所有
Bb
行的返回资格吗?我已经根据@vkp提供的解决方案解决了我的问题。但为了回答您的问题,我的表格只能在年份列中包含“2000”或“2001”。没有其他年份会出现。但是,如果可能有其他年份的值,那么我希望获得具有相同名称的超过一年的记录。