Что такое SELF JOIN и когда бы вы его использовали? [дубликат]


Возможные Дубликаты:
sql: self-joins explained

что такое self join и когда бы вы его использовали? Я не понимаю, как я присоединяюсь, поэтому объяснение непрофессионала с примером было бы здорово.

5 89

5 ответов:

вы используете самосоединение, когда таблица ссылается на данные сама по себе.

например, an Employee таблица может иметь SupervisorID столбец, указывающий на сотрудника, который является начальником текущего сотрудника.

чтобы запросить данные и получить информацию для обоих людей в одной строке, вы можете самостоятельно присоединиться следующим образом:

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

ну, один классический пример, где вы хотели получить список сотрудников и их непосредственных руководителей:

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

он в основном используется там, где есть какая-либо связь между строками, хранящимися в одной таблице.

  • человек.
  • многоуровневый маркетинг.
  • детали машин.

и так далее...

самосоединение-это просто когда вы соединяете таблицу с собой. Нет никакого SELF JOIN ключевое слово, вы просто пишете обычное соединение, где обе таблицы, участвующие в соединении, являются одной и той же таблицей. Следует отметить, что при самостоятельном присоединении необходимо использовать псевдоним для таблицы, иначе имя таблицы будет неоднозначным.

это полезно, когда вы хотите соотнести пары строк из одной таблицы, например, отношения родитель - ребенок. Следующий запрос возвращает названия всех непосредственных подкатегорий категории "кухня".

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

SQL self-join просто является нормальным соединением, которое используется для присоединения таблицы к себе.

пример:

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

вы бы использовали самосоединение в таблице, которая" ссылается " на себя - например, таблица сотрудников, где managerid является внешним ключом к employeeid в той же таблице.

пример:

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