Russian Qt Forum
Май 05, 2024, 12:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос объединяющий ключевое поле и несколько строк в другой таблице  (Прочитано 6154 раз)
Danila_Bagrofff
Гость
« : Апрель 25, 2011, 09:54 »

Можно ли получить как-либо запрос, который объединит в одной строке следующие параметры.
есть 2 таблицы.
В первой таблице описания объектов objects:
idObj nameObj typeObj stateObj

Есть 2 таблица attributes с атрибутами объектов, связь идет c объектами по idObj.
idObj typeAttr Attr

Хотелось бы как-то сделать запрос, в котором объединились в одной строке:
idObj nameObj typeObj stateObj и дальше перечисление всех Attr.
То есть сразу видеть все параметры данного объекта.

Возможно ли сделать такой запрос? Сам ответа не нашел...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 25, 2011, 09:56 »

man join
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Danila_Bagrofff
Гость
« Ответ #2 : Апрель 25, 2011, 12:40 »

нет, join'а недостаточно..

смотри
1 таблица, objects
idObj nameObj typeObj stateObj
1      Объект1     Тип1    Сост1
2      Объект2     Тип2     Сост2

2 таблица, attributes
idObj typeAttr Attr
1       типА1    123
1       типА2     321
1       типА3    324
2       типА1    565
2       типА3    456

Запрос вида
select idObj, nameObj, typeObj, stateObj, Attr
from objects join attributes  on attributes.idObj  = objects.idObj
where objects.idObj = 1

Нам даст 3 строчки
1      Объект1     Тип1    Сост1 123
1      Объект1     Тип1    Сост1 321
1      Объект1     Тип1    Сост1 324

А я хотел бы увидеть одну такого вида:
1      Объект1     Тип1    Сост1 123  321  324

Вот как состряпать такое.. никак не разумею..
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 25, 2011, 12:52 »

На сколько я помню, так не получится сделать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
asvil
Гость
« Ответ #4 : Апрель 25, 2011, 12:53 »

Так это же чистой воды агрегация. Если Вы счастливый обладатель Postgresql, то сделайте примерно
Код:
select idObj, nameObj, typeObj, stateObj, array_agg(Attr)
from objects join attributes  on attributes.idObj  = objects.idObj
group by nameObj, typeObj
having objects.idObj = 1

Иначе всматривайтесь в агрегирующие в массивы функции в Вашей СУБД
Записан
MoPDoBoPoT
Гость
« Ответ #5 : Апрель 25, 2011, 21:28 »

Если нет возможности решить стандартными средствами СУБД (как продемонстрировал Михаил), то можно воспользоваться самописной хранимой функцией, которая на вход получает "idObj", а возвращает сцепленные строки "Attr" для данного объекта.
Записан
vlad-mal
Гость
« Ответ #6 : Май 24, 2011, 06:23 »

В FireBird, к примеру, есть агрегатная функция List, которая формирует список значений с разделителями (например, через запятую).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 22.