Self Join
Em PostgreSQL, uma auto-junção (self-join) é um tipo especial de junção em que uma tabela é combinada com ela mesma. Isso pode ser útil em situações onde você tem dados relacionados dentro da mesma tabela. Para realizar uma auto-junção, você precisa usar aliases para diferenciar entre as instâncias da mesma tabela.
Aqui está a sintaxe básica de uma auto-junção:
SELECT t1.coluna, t2.coluna
FROM tabela AS t1
JOIN tabela AS t2
ON t1.coluna_de_juncao = t2.coluna_de_juncao;
Neste exemplo:
tabela
é o nome da tabela que você está auto-juntando.t1
et2
são aliases que você usa para diferenciar entre as duas instâncias da mesma tabela.coluna_de_juncao
é a coluna na tabela que é usada como base para a junção.
Aqui está um exemplo prático de uma auto-junção. Suponha que você tenha uma tabela chamada empregados
com colunas id
e supervisor_id
, onde supervisor_id
é a chave estrangeira que se relaciona com a coluna id
na mesma tabela para indicar o supervisor de cada empregado. Você pode usar uma auto-junção para encontrar os nomes dos empregados e seus supervisores:
SELECT e1.nome AS empregado, e2.nome AS supervisor
FROM empregados AS e1
LEFT JOIN empregados AS e2
ON e1.supervisor_id = e2.id;
Neste exemplo, e1
é um alias para a tabela empregados
que representa os empregados, e e2
é um alias para a mesma tabela que representa os supervisores. A cláusula LEFT JOIN
é usada para garantir que mesmo os empregados sem supervisores sejam incluídos no resultado. A auto-junção é realizada comparando supervisor_id
em e1
com id
em e2
.