Возможный дубликат:
sql: объяснения для самостоятельного подключения
Что такое самостоятельное присоединение, и когда вы его используете? Я не понимаю, что я присоединяюсь, поэтому объяснение непрофессионала с примером будет замечательным.
Возможный дубликат:
sql: объяснения для самостоятельного подключения
Что такое самостоятельное присоединение, и когда вы его используете? Я не понимаю, что я присоединяюсь, поэтому объяснение непрофессионала с примером будет замечательным.
Вы используете самосоединение, когда таблица ссылается на данные сама по себе.
Например, таблица 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 просто является обычным соединением, которое используется для соединения таблицы с самим собой.
Пример:
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