1
select e.Name, m.Name as 'Manager Id'
FROM Employee e
left outer join Employee m on e.ManagerId = m.EmployeeId

このコードでは、左外部結合を使用して目的の出力を取得しました。以下のコードも上記と同じ出力を示しています。

select e.Name, (Select m.name from Employee m where m.EmployeeId = e.ManagerId) as 'Manager Name'
From Employee e

これらのコードの同じ出力を得るための他の可能なコードがあるかどうか知りたいですか? ちなみに、私のテーブルは、EmployeeId、Name、ManagerId の 3 つの列で構成されています。

EmpId  |   Name | ManagerId
1      |Charlie    | 2
2      |Mike       | 3
3      |Jayr       |
4      |Ivan       | 3
5      |Franz      | 3
6      |Alexis     | 2

managerID は EmpID でもあります。チャーリーの場合と同様に、チャーリーのマネージャーはマイクです。これは、empID が 2 で、チャーリーのマネージャー ID が 2 であるためです。他でも同じです。以下は、上記のコードの出力です。

EmployeeName | ManagerName
Charlie       |  Mike
Mike          |  Jayr
Jayr          |  NULL
Ivan          |  Jayr
Franz         |  Jayr
Alexis        |  Mike
4

2 に答える 2

1

最初のバージョンである左外部結合は、可能な限り簡潔で簡潔です。CTE、サブクエリ、ユニオンを使用して、このクエリを作成する方法はおそらく他にもありますが、私にはわかりませんが、私のお金では、ポイントレスの複雑さをレイヤー化するだけです。

于 2013-01-22T14:37:50.583 に答える
0

再帰 CTE の例。CTE に関する詳細情報

;WITH cte AS
(
 SELECT EmpId, Name, ManagerId, CAST(ManagerId AS nvarchar(10)) AS ManagerName
 FROM dbo.Employee
 WHERE ManagerId IS NULL
 UNION ALL
 SELECT e.EmpId, e.Name, e.ManagerId, c.Name
 FROM dbo.Employee e JOIN cte c ON e.ManagerId = c.EmpId
 )
 SELECT Name, ManagerName
 FROM cte
 ORDER BY EmpId

SQLFiddle のデモ

于 2013-01-22T16:35:35.380 に答える