自己結合は、同じテーブルの2つ以上のインスタンスが共通のデータ型の列/フィールドを介して結合される内部結合のようなものです。このような結合(内部結合)は、結合条件に基づいて、結果として共通の行を提供します。
従業員テーブルには3つのレコードが含まれています。この場合、
従業員としての従業員:
+-----+---------------+------------+
| id | employee | manager_id |
+-----+---------------+------------+
| 1 | Ola | NULL |
| 2 | Ahmed | 1 |
| 3 | Tove | 1 |
+----------+----------+------------+
マネージャーとしての従業員:
+-----+---------------+------------+
| id | employee | manager_id |
+-----+---------------+------------+
| 1 | Ola | NULL |
| 2 | Ahmed | 1 |
| 3 | Tove | 1 |
+----------+----------+------------+
最初のケース:違いを理解するためにこれを試してみましょう:
SELECTemp.*
、manager.*
FROM従業員をemp、従業員をmanagerWHERE emp.id =manager.manager_id
+-----+---------------+------------+-----+---------------+------------+
| id | employee | manager_id | id | employee | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 1 | Ola | NULL | 2 | Ahmed | 1 |
| 1 | Ola | NULL | 3 | Tove | 1 |
+----------+----------+------------+----------+----------+------------+
emp.id=manager.manager_idを参照してください。したがって、NAMEとしてのemp.employeeは最初のテーブルからOlaの行を与え、MANAGERとしてのmanager.employeeは2番目のテーブルからAhmed&Toveの行を与えています。
2番目のケース:違いを理解するためにこれを試してみましょう:
SELECTemp.*
、manager.*
FROM従業員を従業員、従業員をマネージャーWHERE manager.id =emp.manager_id
+-----+---------------+------------+-----+---------------+------------+
| id | employee | manager_id | id | employee | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 2 | Ahmed | 1 | 1 | Ola | NULL |
| 3 | Tove | 1 | 1 | Ola | NULL |
+----------+----------+------------+----------+----------+------------+
manager.id=emp.manager_idを参照してください。したがって、NAMEとしてのemp.employeeは最初のテーブルからAhmed&Toveの行を与え、MANAGERとしてのmanager.employeeは2番目のテーブルからOlaの行を与えています。