Re: Вопрос по построению запросу

From: Dmitriy Olshevskiy <olshevskiy87(at)bk(dot)ru>
To: Владимир Комаров <vlads(at)sibnet(dot)ru>
Cc: Alexey Kolpakov <al(dot)kolpak(at)gmail(dot)com>, Oleg Bartunov <obartunov(at)gmail(dot)com>, pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Вопрос по построению запросу
Date: 2014-10-20 19:31:21
Message-ID: 54456309.7090301@bk.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Здравствуйте, Олег, Владимир и Алексей.
У меня несколько замечаний, которые я позволю себе высказать.
1.
>> select concat_ws(',', t.*) from spr.tovar t;
select t::text from spr.tovar t;
оба запроса по сути делают одно и то же, но второй заметно короче.
2.
>> select concat_ws(',', coalesce('', spr.tovar.*)) from spr.tovar
У coalesce здесь на первом месте константа '', а не проверяемое значение.
В таком случае результатом всегда будет пустая строка, потому что она не
null.
3.
с таким coalesce postgres будет ругаться на круглые скобки (DETAIL:
Missing left parenthesis), указывая на первый апостроф пустой строки, т.е
он будет ожидать тип записи таблицы spr.tovar.
4.
честно говоря, у меня нет своего решения, но вот тут нашел одно
довольное интересное
http://stackoverflow.com/questions/11469059/postgresql-return-entire-row-as-array
т.е. в вашем случае, Владимир, можно написать так:
select array_to_string(
translate(
string_to_array(t::text,',')::text, '()', ''
)::text[], ','
)
from spr.tovar t

Проверял на postgresql 9.3.4.
Если в чем-то неправ, прошу объяснить почему. Спасибо)

On 20.10.2014 21:29, Oleg Bartunov wrote:
> Не забываем про coalesce(), если не хотите удивляться !
> select concat_ws(',', coalesce('', spr.tovar.*)) from spr.tovar
>
> 2014-10-20 21:03 GMT+04:00 Alexey Kolpakov <al(dot)kolpak(at)gmail(dot)com
> <mailto:al(dot)kolpak(at)gmail(dot)com>>:
>
> select concat_ws(',', "spr.tovar".*) from spr.tovar
>
>
> 20 октября 2014 г., 20:31 пользователь Владимир Комаров
> <vlads(at)sibnet(dot)ru <mailto:vlads(at)sibnet(dot)ru>> написал:
>
> Здраствуйте.
>
> Есть запрос:
>
> SELECT * FROM spr.tovar
>
> Надо вместо «*» поставить некую функцию, которая возвращала
> только одну строку типа text, содержащую информацию из всех
> столбцов таблицы. Т.е. соединяла их в одну строку.
>
> Количество столбцов, как и их содержание неизвестно. Так что
> предложение на подобии kod||','||name||','||… не подходят.
>
> Пример:
>
> SELECT * FROM spr.tovar
>
> X name …
>
> -----------------------
>
> 1 tov1 …
>
> 2 tov2 …
>
> А надо
>
> SELECT ??? FROM spr.tovar
>
> Text
>
> ------------
>
> 1,tov1,…
>
> 2,tov2,…
>
> Заранее большое спасибо.
>
>
>
>
> --
> wbr, Alexey Kolpakov
>
>

--
Dmitriy Olshevskiy

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Oleg Bartunov 2014-10-20 19:36:13 Re: [pgsql-ru-general] Вопрос по построению запросу
Previous Message Oleg Bartunov 2014-10-20 17:29:34 Re: [pgsql-ru-general] Re: [pgsql-ru-general] Вопрос по построению запросу