Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Self Join verstehen

Self Join ist wie ein innerer Join, bei dem zwei oder mehr Instanzen derselben Tabelle durch eine gemeinsame Datentypspalte/-feld miteinander verbunden werden. Ein solcher Join (Inner Join) liefert die gemeinsamen Zeilen als Ergebnis, basierend auf der Join-Bedingung.

Die Mitarbeitertabelle enthält drei Datensätze. In diesem Fall

Angestellter als Angestellter:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

Mitarbeiter als Manager:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

Jetzt Erster Fall:Versuchen wir Folgendes, um den Unterschied zu verstehen:

WÄHLEN Sie emp.* , manager.* FROM Mitarbeiter als emp, Mitarbeiter als 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       |
+----------+----------+------------+----------+----------+------------+

Siehe emp.id =manager.manager_id . So gibt emp.employee als NAME Zeilen von Ola aus der ersten Tabelle und manager.employee als MANAGER gibt Zeilen von Ahmed &Tove aus der zweiten Tabelle.

Nun Zweiter Fall:Versuchen wir Folgendes, um den Unterschied zu verstehen:

WÄHLEN Sie emp.* , manager.* FROM Mitarbeiter als Angestellter, Angestellter als ManagerWHERE 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     |
+----------+----------+------------+----------+----------+------------+

Siehe manager.id =emp.manager_id . So gibt emp.employee als NAME Zeilen von Ahmed &Tove aus der ersten Tabelle und manager.employee als MANAGER gibt Zeilen von Ola aus der zweiten Tabelle.