Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 12.12.2016
Сообщений: 15

Запрос из нескольких таблиц

12.12.2016, 20:23. Показов 2821. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Не бейте сильно ногами, я только начал вникать в PostgreSQL.
Есть запрос из 4 таблиц.
Выглядит так:
Кликните здесь для просмотра всего текста

SELECT
jobs.id as jobs_id,
jobs.title as jobs_title,
jobs.description,
jobs.visible,

jobs_condition.id as condition_id,
jobs_condition.title as condition_title,

jobs_contacts.id as contact_id,
jobs_contacts.title as contact_title,

jobs_punct.id as punct_id,
jobs_punct.title as punct_title

FROM
jobs
LEFT JOIN
jobs_condition
ON
jobs.id = jobs_condition.id_jobs
LEFT JOIN
jobs_punct
ON
jobs_condition.id = jobs_punct.id_jobs_condition
LEFT JOIN
jobs_contacts
ON
jobs.id = jobs_contacts.id_jobs
WHERE
jobs.id =177

Выводится примерно в такую модель
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
 $scope.model jobs.id = {
         title: "",
         description: "",
         jobs_condition: [
                          title
                          jobs_punct: [
                                    title 
                          ]
         ],
         jobs_contacts: [
                      title
         ]
    };

То есть у jobs два свойства и два объекта. У этих объектов внутри массивы со свойствами, но в одном объекте(condition) помимо свойства еще объект(punct) с массивом.
Когда в БД в таблицах:condition, punct,contact, например по две записи, запрос выдает 8 записей при одной основной записи:
Кликните здесь для просмотра всего текста
jobs_idjobs_titledescriptionvisiblecondition_idcondition_titlecontact_idcontact_titlepunct_idpunct_title
177названиеописаниеИСТИНА66инфо131контакт144пункт1
177названиеописаниеИСТИНА66инфо131контакт145пункт2
177названиеописаниеИСТИНА66инфо131контакт146пункт3
177названиеописаниеИСТИНА66инфо131контакт147пункт4
177названиеописаниеИСТИНА67инфо232контакт244пункт1
177названиеописаниеИСТИНА67инфо232контакт245пункт2
177названиеописаниеИСТИНА67инфо232контакт246пункт3
177названиеописаниеИСТИНА67инфо232контакт247пункт4

Собственно вопрос:
1. Нормально ли работает запрос? Или есть возможность вывода каскадом чтоли, без дублей?

Если выводить без массивов с айдишниками, то проблем нет, но сейчас появилась надобность выводить в массив и без айди, только тайтлы. И собственно цикл хреначит по 8 тайтлов(в данном примере равное кол-ву записей по селекту). Ну или я с циклом что то не так делю.
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2016, 20:23
Ответы с готовыми решениями:

SQL запрос, Count из нескольких таблиц
Здравствуйте, помогите написать один запрос для следующих таблиц: Пусть есть таблица персонала: Таблица: Staff +----+--------+ ...

Запрос из нескольких таблиц
Нужно создать запрос с INNER JOIN 1. Найти фамилию и телефон клиента, оформившего заказ с заданным номером. Нужно объединить две...

Запрос из нескольких таблиц
Есть таблица Трудоемкость, Столбцы:Наименование детали, Технология, Пов1, Пов2, Пов348, Пов567, Сверление, Ячейка. Есть таблица План....

2
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
13.12.2016, 15:07
Очень запутанно объясняете.
Одно могу сказать, запрос работает нормально (не вдаваясь в тонкости).
Каскадом выводить нельзя, SELECT всегда возвращает некоторое отношение (таблицу).

Не понятно, что у вас там циклом реализуется, можно попытаться использовать встроенные возможности postgresql по обработке JSON.
Например, так
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT json_agg(jobs_condition) AS jobs_conditions
FROM
(SELECT
json_build_object('title', condition_title, 'jobs_punct', punct_titles) AS jobs_condition
FROM
(SELECT
t.condition_title,
json_agg(t.punct_title) AS punct_titles
FROM test AS t
GROUP BY t.condition_title) AS q1
) AS q2
вместо test нужен ваш мегазапрос. На выходе получается нечто

JSON
1
[{"title" : "инфо2", "jobs_punct" : ["пункт1", "пункт2", "пункт3", "пункт4"]}, {"title" : "инфо1", "jobs_punct" : ["пункт1", "пункт2", "пункт3", "пункт4"]}]
1
0 / 0 / 0
Регистрация: 12.12.2016
Сообщений: 15
15.12.2016, 10:38  [ТС]
Блин, старался объяснить, как можно лучше) Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2016, 10:38
Помогаю со студенческими работами здесь

Запрос из нескольких таблиц
Добрый день, уважаемые форумчане. Пытаюсь самостоятельно создать базу данных для диспетчерской службы (признаюсь, это моя первая база...

Запрос из нескольких таблиц
Всем привет. Имеются 3 таблицы - акустические гитары, электрогитары, бас гитары. В каждой таблице есть поле- количество. Нужно сложить...

Запрос из нескольких таблиц
Добрый день, к примеру в одной БД у меня есть таблица переводчики, в ней две колонки переводчик и возраст и есть таблица 2 в ней те же...

Запрос из нескольких таблиц
Пытаюсь сделать в ADOQUERY запрос на выборку из нескольких таблиц. По задумке должно быть так: SELECT * FROM A1 WHERE <D1 ...

MySql запрос, из нескольких таблиц
Здравствуйте. Допустим у нас проект о группах и специальностях студентов в универе. В БД есть 2 таблицы : 1. group (группы), в ней 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru