我一直在努力弄清楚如何确定在一位名叫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表,我错过了什么?
答案 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()
是必要的,以确保只返回一行,即使有更多具有该名称的员工