SQL:递归查询

时间:2012-12-05 17:40:42

标签: sql recursion

我一直在努力弄清楚如何确定在一位名叫Blake的特定员工之后雇用了多少员工。我想使用递归查询。我尝试了以下查询无济于事:

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

我的想法是,我通过'e.Hiredate = b.Hiredate'加入Employees表,我错过了什么?

3 个答案:

答案 0 :(得分:1)

如果您没有

,您的查询就会有效
      e.Hiredate = b.Hiredate
  and e.Hiredate > b.Hiredate

我希望你能看到2个值不能*同时*相等且不相等!!

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

当然,既然你问了一个相当基本的101问题,我假设只有一名员工可以命名为'blake'(即Ename是一个唯一的标识符),否则还有其他逻辑漏洞可供选择。< / p>

由于你是从SQL开始的,我还建议你使用ANSI连接而不是table-list(逗号)形式,如下所示:

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

答案 1 :(得分:0)

又快又脏:

SELECT Ename, Hiredate
FROM employees
WHERE hiredate > (SELECT TOP 1 hiredate FROM employees WHERE ename = 'blake')

答案 2 :(得分:0)

select e.*
from employees e
where hiredate > (select max(hiredate)
                  from employees
                  where ename = 'blake');

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