2016-05-03 8 views
2

を結合しなさい。
従業員ID、従業員のマネージャID、従業員のマネージャのマネージャIDを取得したいとします。のない従業員と彼のマネージャーの詳細は、私が<strong>従業員ID</strong>と<strong>マネージャID</strong>を含むテーブル<strong>従業員</strong>を持って

私は自己結合を使用してそれを得ることができ、他方は

Select employe id, Manager id 
from emplyee as a, employee as b 
where a.manager_id = b.employee id 

のように参加する。しかし、より良い方法はありますか?一度テーブルに問い合わせるだけで、ジョインなしでこれを行うことはできますか?

+0

不要なデータベースタグを削除しました。 –

+1

サブクエリを使用できます。しかし、参加が良いです。 – Kason

+1

より良い方法があります:古くからの古い暗黙のjoinの代わりに、適切な明示的な 'JOIN'演算子をwhere節に使用してください。 –

答えて

1

あなたは再帰CTEを使用することができますが、それでもあなたはこの例で

ルックを結合を使用する必要があります。

WITH MyCTE 
AS (
    SELECT EmpID, FirstName, LastName, ManagerID 
    FROM Employee 
    WHERE ManagerID IS NULL 
    UNION ALL 
    SELECT EmpID, FirstName, LastName, ManagerID 
    FROM Employee 
     INNER JOIN MyCTE ON Employee.ManagerID = MyCTE.EmpID 
    WHERE Employee.ManagerID IS NOT NULL 
    ) 
SELECT * 
FROM MyCTE 

http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/ PinalデイブによってCTEの詳細については、このリンクを参照してください。

+1

インデントを入力してください –

0

共同関連のサブクエリを結合として考慮しない場合は、これを行うことができます。

Select e.employee_id, 
     e.manager_id, 
     (select manager_id 
     from employee e2 
     where e2.employee_id = e.manager_id) as employee_manager_id 
from employee e; 

しかし、ある時点で、には、何らかの種類の「参加」を行うがあります。

関連する問題