Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie samodzielnego łączenia

Sprzężenie własne jest podobne do sprzężenia wewnętrznego, w którym co najmniej dwa wystąpienia tej samej tabeli są połączone ze sobą za pomocą wspólnej kolumny/pola typu danych. Takie złączenie (złączenie wewnętrzne) daje jako wynik wspólne wiersze, w oparciu o warunek złączenia.

Tabela pracowników zawiera trzy rekordy. W takim przypadku

pracownik jako emp:

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

pracownik jako kierownik:

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

Teraz pierwszy przypadek:spróbujmy zrozumieć różnicę:

WYBIERZ emp.* , manager.* OD pracownik jako emp, pracownik jako menedżerGDZIE 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       |
+----------+----------+------------+----------+----------+------------+

Zobacz, emp.id =manager.manager_id . Tak więc emp.employee jako NAZWA podaje wiersze z Olą z pierwszego stołu i manager.employee jako MANAGER daje wiersze z Ahmedem i Tove z drugiego stołu.

Teraz drugi przypadek:spróbujmy zrozumieć różnicę:

WYBIERZ emp.* , manager.* OD pracownika jako emp, pracownika jako managerGDZIE 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     |
+----------+----------+------------+----------+----------+------------+

Zobacz manager.id =emp.manager_id . Tak więc emp.employee jako NAZWA podaje rzędy Ahmeda i Tove z pierwszego stołu, a manager.employee jako MANAGER daje rzędy Oli z drugiego stołu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mysql do wykonania zadania po 30 sekundach

  2. Laravel Sail odbudowuje domyślną bazę danych

  3. Kopiowanie danych z jednej tabeli do drugiej ORAZ dodawanie dodatkowych danych

  4. Grupa Laravel Eloquent według najnowszego rekordu

  5. Kontener MySQL Docker nie zapisuje danych w nowym obrazie