0

我一直试图弄清楚如何确定在一个名为 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表加入到自身中,我错过了什么?

4

3 回答 3

1

如果您两者都没有,您的查询将有效

      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 问题,我假设只有一名员工可以被命名为“布莱克”(即Ename是一个唯一标识符),否则还有其他逻辑漏洞可供选择。

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

Select E.Ename, E.Hiredate
  From EMPLOYEES E
  JOIN EMPLOYEES B on e.Hiredate > b.Hiredate
 WHERE b.Ename = 'blake';
于 2012-12-05T17:58:35.403 回答
0

又快又脏:

SELECT Ename, Hiredate
FROM employees
WHERE hiredate > (SELECT TOP 1 hiredate FROM employees WHERE ename = 'blake')
于 2012-12-05T17:48:44.127 回答
0
select e.*
from employees e
where hiredate > (select max(hiredate)
                  from employees
                  where ename = 'blake');

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

于 2012-12-05T17:48:53.923 回答