Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comprendre l'auto-adhésion

L'auto-jointure est comme une jointure interne où deux ou plusieurs instances de la même table sont jointes via une colonne/un champ de type de données commun. Une telle jointure (jointure interne) donne les lignes communes comme résultat, en fonction de la condition de jointure.

La table des employés contient trois enregistrements. Dans ce cas,

employé en tant qu'emp :

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

employé en tant que manager :

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

Premier cas :Essayons ceci pour comprendre la différence :

CHOISIR emp.* , manager.* FROM employé en tant qu'emp, employé en tant que 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       |
+----------+----------+------------+----------+----------+------------+

Voir, emp.id =manager.manager_id . Ainsi, emp.employee en tant que NAME donne les lignes d'Ola de la première table et manager.employee en tant que MANAGER donne les lignes d'Ahmed &Tove de la deuxième table.

Maintenant Deuxième cas :Essayons ceci pour comprendre la différence :

CHOISIR emp.* , manager.* FROM employé en tant qu'emp, employé en tant que 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     |
+----------+----------+------------+----------+----------+------------+

Voir, manager.id =emp.manager_id . Ainsi, emp.employee en tant que NAME donne les lignes d'Ahmed &Tove de la première table et manager.employee en tant que MANAGER donne les lignes d'Ola de la deuxième table.