Menu
Coddy logo textTech

Self join

Parte de la sección Fundamentos del Journey de SQL de Coddy. Lección 46 de 72.

Los self-joins son un tipo diferente de joins. Hasta ahora, hemos hablado de joins de múltiples tablas, pero los self-joins se unen a la misma tabla. Un ejemplo clásico sería una tabla de employees.

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

Cada empleado tiene un gerente excepto el gerente principal, y cada gerente también es un empleado.

El problema: Para cada empleado queremos saber el nombre del manager.

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

Hacemos un join entre la misma tabla excepto que una vez la llamamos e1 y la segunda vez es e2. El join se realiza entre los campos employee_id y manager_id.

El resultado:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

Desafío

Intermedio

Tablas y columnas disponibles:

  • <strong>friends</strong>: <strong>id</strong>, <strong>name</strong>, <strong>friend_id</strong>

Encuentra pares de amigos que sean amigos mutuos (existe amistad mutua cuando el friend_id de la persona A apunta a la persona B Y el friend_id de la persona B apunta a la persona A). Muestra los nombres de ambos amigos en una sola fila. Nombra las columnas friend1 y friend2.

Nota: Incluye en la cláusula WHERE el criterio friend1.id < friend2.id para que no incluya pares duplicados 

Pruébalo tú mismo

-- Une la tabla consigo misma para que una fila pueda mostrar dos personas diferentes
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- Mantén solo los pares que se apuntan mutuamente
WHERE ____ AND f1.id < f2.id;
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Playground de SQL