Форум программистов, компьютерный форум, киберфорум
Наши страницы

PostgreSQL

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

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

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

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

Выбор данных из нескольких таблиц - Базы данных
Добрый вечер ! Как можно организовать выбор (Какими директивами SQL) из нескольких таблиц при наличии следующих условий: Имеется две...

Выбор данных из нескольких таблиц - PostgreSQL
Имеются 2 таблицы: CREATE TABLE IF NOT EXISTS notes( /* 1 */ id SERIAL PRIMARY KEY UNIQUE, /* номер записи */ note...

Выборка из нескольких таблиц одновременно - Базы данных
Можно ли выбрать данные из нескольких таблиц одновременно? Что-то типа 'Select * from Tab1, Tab2, ... TabN'

Выборка данных из нескольких таблиц - Базы данных
Есть две таблицы. Одна хранит в себе список объектов(поля: object_id,object_name). Вторая - список статусов данных...

SQLite вывод данных из нескольких таблиц - Базы данных
Добрый день. Хотелось бы узнать у вас ответ на свой вопрос или узнать совет где можно найти этот ответ. Проблема состоит вот в чем....

2
grgdvo
589 / 520 / 151
Регистрация: 02.09.2012
Сообщений: 1,543
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"]}]
1
morozeckiy
0 / 0 / 0
Регистрация: 12.12.2016
Сообщений: 15
15.12.2016, 10:38  [ТС] #3
Блин, старался объяснить, как можно лучше) Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2016, 10:38
Привет! Вот еще темы с ответами:

Скорость одной или нескольких таблиц - PostgreSQL
Здравствуйте! хочу попросить совета в проектировании БД. В данный момент пишу многопоточный сервер, который осуществляет выборку данных...

Как красиво вывести объединение нескольких таблиц - PostgreSQL
Пример. 3 таблицы: факультеты, кафедры, группы. Связь у таблиц 1 ко многим соответственно. Все наименования уникальны. Связываем left...

Отчет в виде письма, комбинированный из нескольких таблиц excel - Базы данных
Всем привет. Хочу сделать базу данных по формирования и отправке писем. Короче: 1. Есть 5 клиентов 2. В конце каждого...

Запрос из двух таблиц - PostgreSQL
Доброго времени суток, форумчане. Есть 2 таблицы, в импортируемой поставке поля (код поставки, кол-во товара, код товара), экспортируемой...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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