Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
morozeckiy
0 / 0 / 0
Регистрация: 12.12.2016
Сообщений: 15
#1

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

12.12.2016, 20:23. Просмотров 266. Ответов 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 тайтлов(в данном примере равное кол-ву записей по селекту). Ну или я с циклом что то не так делю.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2016, 20:23     Запрос из нескольких таблиц
Посмотрите здесь:

PostgreSQL Запрос из двух таблиц
Получение комментариев полей и таблиц Postgresql PostgreSQL
PostgreSQL Объединение таблиц
Выборка из трех таблиц одним запросом PostgreSQL
Просмотр таблиц PostgreSQL
Содинение таблиц PostgreSQL
PostgreSQL Выбор данных из нескольких таблиц
Скорость одной или нескольких таблиц PostgreSQL
PostgreSQL Выборка из 2 таблиц
PostgreSQL Вставка данных в несколько таблиц с подчинением
PostgreSQL Графический вид таблиц и их соединения
Объединение трех одинаковых таблиц по одному полю PostgreSQL

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
528 / 469 / 131
Регистрация: 02.09.2012
Сообщений: 1,373
13.12.2016, 15:07     Запрос из нескольких таблиц #2
Очень запутанно объясняете.
Одно могу сказать, запрос работает нормально (не вдаваясь в тонкости).
Каскадом выводить нельзя, 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"]}]
morozeckiy
0 / 0 / 0
Регистрация: 12.12.2016
Сообщений: 15
15.12.2016, 10:38  [ТС]     Запрос из нескольких таблиц #3
Блин, старался объяснить, как можно лучше) Спасибо.
Yandex
Объявления
15.12.2016, 10:38     Запрос из нескольких таблиц
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru