web-dev-qa-db-ja.com

SELF JOINとは何ですか?いつ使用しますか?

重複している可能性があります:
sql:self-joinが説明されています

自己結合とは何ですか?いつ使用しますか?私は自己結合を理解していないので、例を用いた素人の説明は素晴らしいでしょう。

95
Imran

テーブルがそれ自体でデータを参照するときは、自己結合を使用します。

たとえば、Employeeテーブルには、現在の従業員の上司である従業員を指すSupervisorID列があります。

データを照会して1人の行で両方の人の情報を取得するには、次のように自己結合できます。

select e1.EmployeeID, 
    e1.FirstName, 
    e1.LastName,
    e1.SupervisorID, 
    e2.FirstName as SupervisorFirstName, 
    e2.LastName as SupervisorLastName
from Employee e1
left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID
150
RedFilter

よくある例として、従業員とその直属の上司のリストを入手したいという場合があります。

select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1

基本的には、同じテーブルに格納されている行間に関係がある場合に使用されます。

  • 従業員.
  • 連鎖販売取引。
  • 機材。

等々...

51
paxdiablo

自己結合は、単にテーブルに結合するときです。 SELF JOINキーワードはありません。結合に関与する両方のテーブルが同じテーブルである通常の結合を書くだけです。注意しなければならないのは、自己結合しているときはテーブルにエイリアスを使用する必要があるということです。そうしないとテーブル名があいまいになります。

たとえば、親子関係のように、同じテーブルの行のペアを相互に関連付ける場合に便利です。次のクエリは、カテゴリ 'Kitchen'のすべての直近のサブカテゴリの名前を返します。

SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
19
Mark Byers

SQL自己結合は、単にテーブルをそれ自体に結合するために使用される通常の結合です。

例:

Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
11

自分自身を「参照する」テーブルに自己結合を使用するとします。 manageridがその同じテーブルのemployeeidに対する外部キーである従業員のテーブル。

例:

SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid
6
Will A