sql >> Databasteknik >  >> RDS >> Mysql

Förstå Self Join

Self join är som en inre join där två eller flera instanser av samma tabell är sammanfogade genom en gemensam datatyp kolumn/fält. Sådan join(inner join) ger de gemensamma raderna som resultat, baserat på sammanfogningsvillkoret.

Personaltabellen innehåller tre poster. I det här fallet,

anställd som anställd:

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

anställd som chef:

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

Nu första fallet:Låt oss prova detta för att förstå skillnaden:

VÄLJ emp.* , manager.* FRÅN anställd som anställd, anställd som chefWHERE 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       |
+----------+----------+------------+----------+----------+------------+

Se, emp.id =manager.manager_id . Således ger anställd som NAMN rader av Ola från första bordet &chef.anställd som MANAGER ger rader av Ahmed &Tove från andra bordet.

Nu andra fallet:Låt oss prova detta för att förstå skillnaden:

VÄLJ emp.* , manager.* FRÅN anställd som anställd, anställd som chefWHERE 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     |
+----------+----------+------------+----------+----------+------------+

Se, manager.id =emp.manager_id . Således ger anställd som NAMN rader av Ahmed &Tove från första bordet &chef.anställd som MANAGER ger rader av Ola från andra bordet.



  1. MySQL Store Image BLOB Dålig praxis prestanda

  2. Använda joins för att kombinera data från olika tabeller i PostgreSQL

  3. Är det säkert att använda LIMIT utan BESTÄLLNING AV

  4. Hur man återställer plåstret efter misslyckad cutover-fas i R12.2