Menu
Coddy logo textTech

Recap - Self Join

Parte da seção Fundamentos do Journey de SQL da Coddy. Lição 47 de 72.

challenge icon

Desafio

Difícil

Tabelas e colunas disponíveis:

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

Para cada pessoa na tabela friends, encontre todas as conexões de amigo de um amigo que ela possui. Uma conexão de amigo de um amigo ocorre quando a pessoa A é amiga da pessoa B, que por sua vez é amiga da pessoa C. Liste essas conexões em três colunas:

  • friend1: a pessoa inicial
  • friend2: o amigo direto dela
  • friend3: o amigo do amigo dela

Regras:

  • Não inclua casos em que friend3 é a mesma pessoa que friend1
  • Ordene os resultados pelo nome de friend1 em ordem decrescente

Exemplo: Se Alice é amiga de Bob, e Bob é amigo de Carol, então Alice-Bob-Carol seria uma conexão válida de amigo de um amigo.

Experimente você mesmo

-- Junte a tabela a si mesma duas vezes para que uma linha contenha uma cadeia de três pessoas
SELECT ____ AS friend1, ____ AS friend2, ____ AS friend3
FROM friends f1
JOIN friends f2 ON ____
JOIN friends f3 ON ____
-- Descarte as cadeias que voltam em loop para a pessoa de onde começaram
WHERE ____
ORDER BY ____ DESC;

Todas as lições de Fundamentos

Pratique por conta própria: Playground de SQL