powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка значений из таблицы с несколькими уровнями вложенности
6 сообщений из 6, страница 1 из 1
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050867
Sviman144
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Прошу помочь по возможности.

Имеется:
1. Таблица со списком товаров (id_товара, id_class, т.е. группы к которой товар относится)
2. Таблица классификаторов (id_class, id_parent_class), где id_parent_class - ссылка на такой же id_class (той же таблицы), т.е. группа более высокого уровня).

Количество вложений групп одну в другу - произвольное.

Необходимо сделать выборку следующего вида:
Товар, Группа (в которую непосредственно входит товар), Главная группа (группа самого верхнего уровня, у которой id_parent_class равен Null).

Сделал через временную таблицу с последующим перебором (cursor), где для каждой группы ищется циклом ее группа "верхнего уровня". Но т.к. товаров много - получается долго. Возможно, есть другие способы?

Среда: SQL2008.

Заранее благодарю за ответы по существу.
...
Рейтинг: 0 / 0
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050875
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача на рекурсию?
СТЕ в 2008-ом уже есть.


Хорошо бы что бы Вы пояснили вопрос примером и примерным результатом.

PS Для больших объёмов будет долго.
...
Рейтинг: 0 / 0
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050879
Sviman144
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SIMPLicity_,

Таблица 1 (товары):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
id_tmc	id_grp
1	1
2	1
3	2
4	5
5	5
6	2
7	3

Таблица 2 (группы)
Код: plaintext
1.
2.
3.
4.
5.
id_grp	id_parent
1	Null
2	Null
3	1
4	2
5	3

Результирующая таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
id_tmc	id_grp	id_grp2
1	1	1
2	1	1
3	2	2
4	5	1
5	5	1
6	2	2
7	3	1

5-я группа принадлежит 3-й, которая, в свою очередь, принадлежит 1-й.
Т.о. в результирующей таблице, в третьем столбце должны быть представлены группы самого верхнего уровня.
...
Рейтинг: 0 / 0
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050895
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sviman144,

я бы использовал тип hierarchyid, по нему голова быстро находится, если проиндексировать.
...
Рейтинг: 0 / 0
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050907
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sviman144

Сделал через временную таблицу с последующим перебором (cursor), где для каждой группы ищется циклом ее группа "верхнего уровня". Но т.к. товаров много - получается долго . Возможно, есть другие способы?

Перепишите свою процедуру (хоть курсором, хоть CTE) так чтобы на основании Таблицы 2 она формировала таблицу (набор данных) вида
id_grpid_head1122314251
То есть Группа и её Главная группа. Таблица групп у вас маленькая - работать будет быстро.
И потом эту таблицу джоините с товарами - и сразу получаетет результат в нужном виде.
...
Рейтинг: 0 / 0
Выборка значений из таблицы с несколькими уровнями вложенности
    #40050985
Sviman144
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerros,

Действительно, количество групп в разы меньше самих товаров и перебрать их быстрее.
Отличная идея!

Спасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка значений из таблицы с несколькими уровнями вложенности
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]