0

私は、ブレイクという名前の特定の従業員の後に何人の従業員が雇用されたかを判断する方法を見つけようとしてきました。再帰クエリを使用したい。私は無駄に次のクエリを試しました:

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

2つの値がどのように等しくて等しくないかを理解できることを願っています。

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

もちろん、あなたはかなり基本的な101の質問をしているので、「blake」という名前を付けることができるのは1人の従業員だけだと思います(つまり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()inは、その名前の従業員がさらにいる場合でも、単一の行のみが返されるようにするために必要です。

于 2012-12-05T17:48:53.923 に答える