Sql 仅检查重复行

Sql 仅检查重复行,sql,oracle,date,join,group-by,Sql,Oracle,Date,Join,Group By,我想检查类别中的所有年份是否相同,如果相同,则返回, 所以我只想返回4和5。我可以得到这张桌子,但不能再多了 SELECT st.category, EXTRACT ( YEAR FROM hiredate) as YEAR FROM NIKOVITS.EMP e, NIKOVITS.SAL_CAT st WHERE e.sal > st.lowest_sal AND e.sal < st.highest_sal 选择 圣彼得堡, 提取(从hiredat

我想检查类别中的所有年份是否相同,如果相同,则返回, 所以我只想返回4和5。我可以得到这张桌子,但不能再多了

SELECT 
    st.category,  
    EXTRACT ( YEAR FROM hiredate) as YEAR 
FROM NIKOVITS.EMP e, 
NIKOVITS.SAL_CAT st 
WHERE e.sal > st.lowest_sal AND e.sal < st.highest_sal
选择
圣彼得堡,
提取(从hiredate提取的年份)作为年份
来自NIKOVITS.EMP e,
NIKOVITS.SAL_猫街
其中e.sal>st.lower\u sal和e.sal

您可以使用聚合:

select st.category, min(extract(year from e.hiredate)) yr
from nikovits.emp e
inner join nikovits.sal_cat st 
    on  e.sal > st.lowest_sal 
    and e.sal < st.highest_sal
group by st.category
having min(extract(year from e.hiredate)) = max(extract(year from e.hiredate))
选择标准类别,最小(提取(从e.hiredate提取的年份))年
来自nikovits.emp e
内连接nikovits.sal_cat st
在e.sal>st.Lower_sal上
和e.sal
请注意,此查询使用标准联接语法(带有
on
关键字),而不是隐式联接(在
from
子句中带有逗号)。这种几十年前的旧语法不应该在新代码中使用

此外,查询中的所有列都应该使用它们所属的表进行限定,以避免歧义;我假设
hiredate
属于表
emp