Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 16:48   #1
Wildrover
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 2
По умолчанию Запрос.

Таблица Parts с полями: ID, Description, Category, Vendor
Таблица Categories с полями: ID, Description
Таблица Vendors с полями: ID, Description

Нужно, в зависимости от выбранного условия группировки (Категория или Производитель) получить таблицу: ID, ParentID, Description содержащую все записи из всех 3-х таблиц.

В результате должно получится дерево.
Wildrover вне форума Ответить с цитированием
Старый 28.02.2012, 23:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Актуально при этом знать какое СУБД
2. Что такое ID в результате? Если предполагается, что это старый ID из таблиц, то получится только в случае, если ID исходных таблиц не пересекаются. В противном случае прийдется сгенерировать новый ID. Соответственно это коснется и ParentID
3. В результирующей таблице скорее всего не достаточно 3-х указанных полей, в ней наверняка потребуется еще информация об источнике записи и значение старого ID
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.02.2012 в 23:35.
Аватар вне форума Ответить с цитированием
Старый 29.02.2012, 08:04   #3
Wildrover
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 2
По умолчанию

1. MSSQL
2. ID не пересекаются.
Wildrover вне форума Ответить с цитированием
Старый 29.02.2012, 10:44   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Возможно так (для категорий). Предположения - ID везде int, если в одной из таблиц есть ID=1, то в других таблицах не должно быть таких ID (ID не пересекаются), формат Description во всех таблицах одинаков. Для производителей аналогично
Код:
SELECT ID,CAST(NULL AS int) AS ParentID,Description FROM Categories
UNION
SELECT P.ID,C.ID AS ParentID,P.Description FROM Categories C,Parts P WHERE C.ID=P.Category
UNION
SELECT V.ID,P.ID AS ParentID,V.Description FROM Parts P,Vendors V WHERE P.Vendor=V.ID
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50