Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите собрать небольшой запрос  [new]
Radzhab
Member

Откуда:
Сообщений: 210
База состоит из двух таблиц

Department
--- id (int primary key)
--- name (varchar)
--- parent (int)

Users
--- Id
--- name
--- department_id

Этот запрос вытаскивает все отделы.
SELECT t1.name AS lvl1, t2.name as lvl2, t3.name as lvl3
FROM Department AS t1
LEFT JOIN Department AS t2 ON t2.parent = t1.id
LEFT JOIN Department AS t3 ON t3.parent = t2.id


Но никак не могу сообразить. Как вывести и пользователей в этот запрос
30 ноя 13, 12:36    [15217164]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
sdet
Member

Откуда:
Сообщений: 463
Radzhab
База состоит из двух таблиц

Department
--- id (int primary key)
--- name (varchar)
--- parent (int)

Users
--- Id
--- name
--- department_id

Этот запрос вытаскивает все отделы.
SELECT t1.name AS lvl1, t2.name as lvl2, t3.name as lvl3
FROM Department AS t1
LEFT JOIN Department AS t2 ON t2.parent = t1.id
LEFT JOIN Department AS t3 ON t3.parent = t2.id



Но никак не могу сообразить. Как вывести и пользователей в этот запрос

Нужно связать с таблицей Users.
Рекурсию вы как то странно делаете
30 ноя 13, 12:45    [15217188]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
Radzhab
Member

Откуда:
Сообщений: 210
sdet,а что странного в ней)) http://habrahabr.ru/post/46659/ взято отсюда
30 ноя 13, 12:55    [15217209]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
Radzhab
Member

Откуда:
Сообщений: 210
Radzhab,то что нужно связать с юзерами это то понятно.. Но как. !!! Мой мозг щас взорвется
30 ноя 13, 12:56    [15217214]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
sdet
Member

Откуда:
Сообщений: 463
Radzhab
Radzhab,то что нужно связать с юзерами это то понятно.. Но как. !!! Мой мозг щас взорвется

У вас же есть связка по department_id В чем проблема
А странно в этом запросе то, что по сути это хардкодный вариант. При добавлении нового уровня надо добавлять новый join, уменьшая производительность
30 ноя 13, 13:16    [15217250]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
Radzhab
Member

Откуда:
Сообщений: 210
sdet,
Количество уровней статика. Больше она и не будет. Лучше помогите с кодом))
30 ноя 13, 13:44    [15217301]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
Radzhab
Member

Откуда:
Сообщений: 210
sdet, а как по другому сделать рекурсию?
1 дек 13, 01:23    [15219400]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
sdet
Member

Откуда:
Сообщений: 463
Radzhab
sdet, а как по другому сделать рекурсию?

;with cteDep(id,dep_name,parent,level)
as
(select d.id,d.name,d.parent,0 as level
 from Department d 
 where d.parent is null
 union all
 select d.id,d.name,d.parent,level+1
 from Department d 
 join cteDep cte on cte.id=d.parent
)
--Дальше зависит в каком виде представить
-- Напр
select d.id,d.dep_name,d.parent,u.name,d.level
from cteDep d left join Users u on d.id=u.department_id
1 дек 13, 03:54    [15219652]     Ответить | Цитировать Сообщить модератору
 Re: Помогите собрать небольшой запрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Radzhab
Но никак не могу сообразить. Как вывести и пользователей в этот запрос


...left join Users i on i.department_id = Department.id
2 дек 13, 09:55    [15223144]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить