SQL从同一个表中选择
我有一张这样的桌子: 我想写一个查询,只输出2000年和2001年发生的记录 在这种情况下,输出将是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
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”。没有其他年份会出现。但是,如果可能有其他年份的值,那么我希望获得具有相同名称的超过一年的记录。