O que é o SELF JOIN e quando você o usaria?

Duplicar Possível:
sql: self-joins explicado

O que é auto adesão e quando você usaria isso? Eu não entendo auto se junta para que uma explicação leiga com um exemplo seria ótimo.

Você usa uma auto-união quando uma tabela faz referência a dados em si.

Por exemplo, uma tabela Employee pode ter uma coluna SupervisorID que aponta para o empregado que é o chefe do empregado atual.

Para consultar os dados e obter informações para as duas pessoas em uma linha, você pode se inscrever assim:

 select e1.EmployeeID, e1.FirstName, e1.LastName, e1.SupervisorID, e2.FirstName as SupervisorFirstName, e2.LastName as SupervisorLastName from Employee e1 left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID 

Bem, um exemplo clássico é onde você deseja obter uma lista de funcionários e seus gerentes imediatos:

 select e.employee as employee, b.employee as boss from emptable e, emptable b where e.manager_id = b.empolyee_id order by 1 

É basicamente usado onde há qualquer relação entre as linhas armazenadas na mesma tabela.

  • funcionários.
  • marketing multi-nível.
  • partes da máquina.

E assim por diante…

Um self join é simplesmente quando você junta uma tabela consigo mesmo. Não existe uma palavra chave SELF JOIN , você apenas escreve uma junit comum onde ambas as tabelas envolvidas na junit são a mesma tabela. Uma coisa a notar é que, quando você se associa, é necessário usar um alias para a tabela, caso contrário, o nome da tabela seria ambíguo.

É útil quando você deseja correlacionar pares de linhas da mesma tabela, por exemplo, um relacionamento pai-filho. A consulta a seguir retorna os nomes de todas as subcategorias imediatas da categoria ‘Cozinha’.

 SELECT T2.name FROM category T1 JOIN category T2 ON T2.parent = T1.id WHERE T1.name = 'Kitchen' 

A auto-junit SQL é simplesmente uma junit normal que é usada para unir uma tabela a si mesma.

Exemplo:

 Select * FROM Table t1, Table t2 WHERE t1.Id = t2.ID 

Você usaria uma auto-adesão em uma tabela que “refere-se” a si mesma – por exemplo, uma tabela de funcionários em que managerid é uma chave estrangeira para employeeid nessa mesma tabela.

Exemplo:

 SELECT E.name, ME.name AS manager FROM dbo.Employees E LEFT JOIN dbo.Employees ME ON ME.employeeid = E.managerid