SQL:递归查询

SQL:递归查询,sql,recursion,Sql,Recursion,我一直在试图找出如何确定在一个叫布莱克的特定员工之后雇佣了多少员工。我想使用递归查询。我尝试了以下查询,但没有结果: 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表加入到自己的

我一直在试图找出如何确定在一个叫布莱克的特定员工之后雇佣了多少员工。我想使用递归查询。我尝试了以下查询,但没有结果:

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表加入到自己的表中,我缺少了什么?

又快又脏:

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

内部查询中的
max()

      e.Hiredate = b.Hiredate
  and e.Hiredate > b.Hiredate
我希望你能看到这两个值不能̲*s̲I̲m̲u̲l̲t̲a̲n̲e̲o̲u̲s̲l̲y̲是平等和不平等的

Select E.Ename, E.Hiredate
From EMPLOYEES E, EMPLOYEES B
Where e.Hiredate > b.Hiredate
and b.Ename = 'blake';
当然,由于您提出的是一个相当基本的101问题,我假设只有一名员工可以被命名为“blake”(即,
Ename
是唯一标识符),否则还有其他逻辑漏洞需要选择

由于您是从SQL开始的,我还建议您使用ANSI连接,而不是表列表(逗号)形式,该形式如下所示:

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

其中e.Hiredate=b.Hiredate和e.Hiredate>b.Hiredate
将生成空结果集。正确。我迷路的地方是如何将所有雇员的雇佣率与布莱克斯进行比较。
Select E.Ename, E.Hiredate
  From EMPLOYEES E
  JOIN EMPLOYEES B on e.Hiredate > b.Hiredate
 WHERE b.Ename = 'blake';