powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединить результат в одну строку
7 сообщений из 7, страница 1 из 1
Объединить результат в одну строку
    #38753839
mdlv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть две таблицы.
Одна содержит поле id_group вида {1,2,3} - массив id, и свой идентификатор записи id_num.

Код: plaintext
1.
2.
3.
 id_num    id_group   
1        {10,20,30}
2        {40,50}
3        {40,60,70}

Вторая таблица содержит записи с этими id и текстовое поле для каждого.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 id     name_value 
10     название1
20     название2
30     название3
40     название4
50     название5
60     название6
70     название7

Есть запрос вида
Код: plsql
1.
SELECT name_value FROM table1 WHERE id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1))


который возвращает набор полей name_value. Необходимо вывести эти name_value в виде одной строки через запятую.

Т.е. выводит:

Код: plaintext
1.
2.
название1
название2
название3

А нужно:

Код: plaintext
название1, название2, название3

Задача осложняется тем, что это PostgreSQL 7.4.
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38753849
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdlv,

такой костыль может сработает в 7.4:

Код: sql
1.
SELECT array_to_string(array(SELECT name_value FROM table1 WHERE id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1))),', ');
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38755667
mdlv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius, спасибо большое за такой быстрый ответ!
К сожалению, выдает ошибку
Код: plsql
1.
ERROR:  operator does not exist: bigint = bigint[]
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38755892
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdlvAlexius, спасибо большое за такой быстрый ответ!
К сожалению, выдает ошибку
Код: plsql
1.
ERROR:  operator does not exist: bigint = bigint[]



это у вас ошибка от куска
id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1))

и значит она была и в исходном приведенном вами запросе.
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38757004
mdlv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukmdlv
Код: plsql
1.
ERROR:  operator does not exist: bigint = bigint[]



это у вас ошибка от куска
id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1))

и значит она была и в исходном приведенном вами запросе.

Спасибо, приведение типов не привело к успеху, возвращается пустое значение

Код: plsql
1.
SELECT array_to_string(array(SELECT name_value FROM table1 WHERE id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[])),', ');



хотя запрос

Код: plsql
1.
SELECT name_value FROM table1 WHERE id = ANY(SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[]



возвращает набор искомых записей, которые в итоге нужно объединить в одну.
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38757053
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdlvMaxim Bogukпропущено...


это у вас ошибка от куска
id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1))

и значит она была и в исходном приведенном вами запросе.

Спасибо, приведение типов не привело к успеху, возвращается пустое значение

Код: plsql
1.
SELECT array_to_string(array(SELECT name_value FROM table1 WHERE id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[])),', ');



хотя запрос

Код: plsql
1.
SELECT name_value FROM table1 WHERE id = ANY(SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[]



возвращает набор искомых записей, которые в итоге нужно объединить в одну.

а вы разницу между
id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[])
и
id = ANY(SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[]

не видите?
...
Рейтинг: 0 / 0
Объединить результат в одну строку
    #38757479
mdlv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
а вы разницу между
id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[])
и
id = ANY(SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[]

не видите?

пардон, Вы правы, запрос такой
Код: plsql
1.
SELECT name_value FROM table1 WHERE id = ANY((SELECT id_group FROM table2 WHERE id_num = 2 LIMIT 1)::bigint[])
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединить результат в одну строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]