我一直在试图弄清楚如何确定在一个名为Blake的特定员工之后雇用了多少员工。我想要使用递归查询。我曾尝试下面的查询无果:SQL:递归查询
我的想法是,我通过参加雇员表本身“e.Hiredate = b.Hiredate”,我缺少什么?
我一直在试图弄清楚如何确定在一个名为Blake的特定员工之后雇用了多少员工。我想要使用递归查询。我曾尝试下面的查询无果:SQL:递归查询
我的想法是,我通过参加雇员表本身“e.Hiredate = b.Hiredate”,我缺少什么?
你查询将工作,如果你没有两个
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';
是的,谢谢你解释。 – bbbbbbbbbb
快速和肮脏的:
SELECT Ename, Hiredate
FROM employees
WHERE hiredate > (SELECT TOP 1 hiredate FROM employees WHERE ename = 'blake')
select e.*
from employees e
where hiredate > (select max(hiredate)
from employees
where ename = 'blake');
在内部查询的max()
是必要的,以确保只有返回单行,即使有更多的员工使用该名称
'如果e.Hiredate = b.Hiredate 和e.Hiredate> b.Hiredate'这将产生一个空的结果集。 – wildplasser
正确。我迷失方向的是如何比较所有雇员的雇用情况。 – bbbbbbbbbb