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

Откуда:
Сообщений: 3
Здравствуйте. Подскажите пожалуйста как написать рекурсивный запрос, данные в котором будут браться из трех разных таблиц. Есть таблица компании:

create table companies (
id_comp int NOT NULL IDENTITY,
name char(50) NOT NULL,
city int NOT NULL,
addr_company char(100) NOT NULL,
PRIMARY KEY (id_comp),
FOREIGN KEY (city) REFERENCES cities (id_city)
);


и есть ритейлеры, у каждого из которых есть родительская компания

create table retailers (
id_retailer int NOT NULL IDENTITY,
name char(50) NOT NULL,
city int NOT NULL,
address char(100) NOT NULL,
parent_company int NOT NULL,
PRIMARY KEY (id_retailer),
FOREIGN KEY (city) REFERENCES cities (id_city),
FOREIGN KEY (parent_company) REFERENCES companies (id_comp)
);


у ритейлеров есть отделы:

create table retailer_departments (
id_department int NOT NULL IDENTITY,
name char(50) NOT NULL,
retailer int NOT NULL,
PRIMARY KEY (id_department),
FOREIGN KEY (retailer) REFERENCES retailers (id_retailer)
);


Помогите пожалуйста получить итоговую древовидную таблицу, в которой во главе было бы НАЗВАНИЕ родительской компании, за ней следовали бы все их ритейлеры, а за ними шло перечисление отделов этих ритейлеров. Вот в таком итоговом виде https://pp.userapi.com/c637530/v637530388/34910/vbYrv6MphR4.jpg
Буду очень признателен за помощь
12 мар 17, 17:22    [20286931]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос нескольких таблиц  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
ghjt
Помогите пожалуйста получить итоговую древовидную таблицу... Вот в таком итоговом виде
а, что вы подразумеваете под "древовидной" таблицей?
ну, и конечный вид (как у вас на картинке) это задача не "рекурсивного запроса", а клиентского приложения.
12 мар 17, 17:41    [20286971]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос нескольких таблиц  [new]
ghjt
Member

Откуда:
Сообщений: 3
Дедушка
а, что вы подразумеваете под "древовидной" таблицей?

Таблицу которая представлена в приложенной картинке. Родитель->под ним его потомки.
12 мар 17, 18:13    [20287030]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос нескольких таблиц  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
ghjt
Дедушка
а, что вы подразумеваете под "древовидной" таблицей?

Таблицу которая представлена в приложенной картинке.
т.е. исходя из вашей картинки вы хотите, чтобы в таблице было следующее:
idcompanies retailers retailer_departments
1Company_1nullnull
2nullRetailer_1null
3nullnullDepat_1
4nullnullDepat_2
5Company_2nullnull
6nullRetailer_2null
7nullnullDepat_3
8nullnullDepat_4
9nullRetailer_3null
10nullnullDepat_5
11nullnullDepat_6

?
12 мар 17, 20:57    [20287419]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос нескольких таблиц  [new]
ghjt
Member

Откуда:
Сообщений: 3
Дедушка
ghjt
пропущено...

Таблицу которая представлена в приложенной картинке.
т.е. исходя из вашей картинки вы хотите, чтобы в таблице было следующее:
idcompanies retailers retailer_departments
1Company_1nullnull
2nullRetailer_1null
3nullnullDepat_1
4nullnullDepat_2
5Company_2nullnull
6nullRetailer_2null
7nullnullDepat_3
8nullnullDepat_4
9nullRetailer_3null
10nullnullDepat_5
11nullnullDepat_6

?


да, вы правы, где то в этом роде.

Еще я решил избавиться от лишней таблицы companies, а все эти родительские компании добавил в общую таблицу retailers, только теперь parent_company не FOREIGN KEY, а обычное поле которое может принимать null. Как мне показалось так будет лучше и проще.
В общем теперь все выглядит вот так:

create table retailers (
id_retailer int NOT NULL IDENTITY,
name char(50) NOT NULL,
city int NOT NULL,
address char(100) NOT NULL,
parent_company int NULL,
PRIMARY KEY (id_retailer),
FOREIGN KEY (city) REFERENCES cities (id_city)
);

create table retailer_departments (
id_department int NOT NULL IDENTITY,
name char(50) NOT NULL,
retailer int NOT NULL,
PRIMARY KEY (id_department),
FOREIGN KEY (retailer) REFERENCES retailers (id_retailer)
);
12 мар 17, 21:17    [20287454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить