Re: Аггрегаторные функции: исключить NULL

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Аггрегаторные функции: исключить NULL
Date: 2011-11-16 13:15:56
Message-ID: 20111116131555.GC8695@apache.rbscorp.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

> On 14.11.11 14:01, Dmitry E. Oboukhov wrote:
>> Есть ли простой способ в третьем столбике исключить {NULL}?
> INNER JOIN?

то есть уточним задачу

есть таблица users

| id | ... |
| 1 | ... |
| 2 | ... |

есть таблица

users_messages

| id | uid | message |
| 1 | 1 | привет |
| 2 | 1 | медвед |

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

SELECT
user.*,
array_agg(messages.message) AS messages
FROM
users AS user
LEFT JOIN users_messages AS messages ON messages.uid = user.id

WHERE
"user"."id" IN (1, 2)

GROUP BY
user.id

Выбирает в последний столбик либо массив сообщений которые есть, либо
{NULL} если таковых нет.

то есть будет выбрано нечто вроде

| 1 | ... | {привет,медвед} |
| 2 | ... | {NULL} |

где ... - остальные поля в users

--

. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Alexey Klyukin 2011-11-16 15:02:10 Re: [pgsql-ru-general] Аггрегаторные функции: исключить NULL
Previous Message Dmitry E. Oboukhov 2011-11-16 11:10:55 Re: Аггрегаторные функции: исключить NULL