O que é auto-adesão e quando você usá-lo? [duplicado]

possível duplicado:
SQL: auto-junção explicada

O que é auto-adesão e quando o usarias? Eu não entendo self junta-se então uma explicação leiga com um exemplo seria ótimo.

Author: DaveInCaz, 2010-07-29

5 answers

Você usa uma auto-junção quando uma tabela referencia os dados em si.

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

Para consultar os dados e obter informações para ambas as pessoas em uma linha, você poderia se juntar 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
 141
Author: RedFilter, 2010-07-29 18:59:19
Bem, um exemplo clássico é onde você queria 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 existe qualquer relação entre linhas armazenadas na mesma tabela.

    Empregados.
  • comercialização a vários níveis.
  • peças para máquinas.
E assim por diante...
 46
Author: paxdiablo, 2010-07-29 11:39:35

Uma auto-adesão é simplesmente quando você se junta a uma mesa consigo mesma. Não existe nenhuma palavra-chave SELF JOIN, você apenas escreve uma junção normal onde ambas as tabelas envolvidas na junção são a mesma tabela. Uma coisa a notar é que quando você está se juntando a si mesmo é necessário usar um alias para a tabela, caso contrário o nome da tabela seria Ambíguo.

É útil quando se quer correlacionar pares de linhas da mesma tabela, por exemplo, uma relação pai - filho. A seguinte consulta devolve o 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'
 16
Author: Mark Byers, 2010-07-29 11:48:45

A auto-junção SQL é simplesmente uma junção normal que é usada para juntar uma tabela para si mesma.

Exemplo:

Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
 12
Author: Michael Pakhantsov, 2010-07-29 11:38:56
{[[2]}você usaria uma auto-adesão em uma tabela que "se refere" a si mesma - por exemplo, uma tabela de empregados onde o managerid é uma chave estrangeira para o emprego 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
 6
Author: Will A, 2010-07-29 11:38:31