2012-12-05 154 views
0

我一直在试图弄清楚如何确定在一个名为Blake的特定员工之后雇用了多少员工。我想要使​​用递归查询。我曾尝试下面的查询无果:SQL:递归查询

我的想法是,我通过参加雇员表本身“e.Hiredate = b.Hiredate”,我缺少什么?

+0

'如果e.Hiredate = b.Hiredate 和e.Hiredate> b.Hiredate'这将产生一个空的结果集。 – wildplasser

+0

正确。我迷失方向的是如何比较所有雇员的雇用情况。 – bbbbbbbbbb

回答

1

你查询将工作,如果你没有两个

 e.Hiredate = b.Hiredate 
    and e.Hiredate > b.Hiredate 

我希望你c看看这两个值如何不能同时和不同!

Select E.Ename, E.Hiredate 
From EMPLOYEES E, EMPLOYEES B 
Where e.Hiredate > b.Hiredate 
and b.Ename = 'blake'; 

当然,既然你问一个相当基本的101个问题,我认为只有一个员工可以被命名为“布莱克”(即Ename是一个唯一的标识符),否则有其它逻辑孔来接。

既然你在SQL开始,我也建议你使用ANSI连接而不是表列表(逗号)的形式,这应该是这样的:

Select E.Ename, E.Hiredate 
    From EMPLOYEES E 
    JOIN EMPLOYEES B on e.Hiredate > b.Hiredate 
WHERE b.Ename = 'blake'; 
+0

是的,谢谢你解释。 – bbbbbbbbbb

0

快速和肮脏的:

SELECT Ename, Hiredate 
FROM employees 
WHERE hiredate > (SELECT TOP 1 hiredate FROM employees WHERE ename = 'blake') 
0
select e.* 
from employees e 
where hiredate > (select max(hiredate) 
        from employees 
        where ename = 'blake'); 

在内部查询的max()是必要的,以确保只有返回单行,即使有更多的员工使用该名称