У меня есть этот запрос:
SELECT jsonb_agg(jsonb_build_object('me_id', me_id)) from message
и получил следующий результат:
[{"me_id": 2064}, {"me_id": 2065}, {"me_id": 2066}, {"me_id": 2067}, {"me_id": 2068}, {"me_id": 2069}, {"me_id": 2070}, {"me_id": 2071}]
Все идет нормально. Однако я хочу ОГРАНИЧИТЬ количество объектов в массиве. Например, до 3. Но добавление LIMIT 3 не работает.
Как я могу ограничить количество объектов в массиве?
Обновлено: Ответ @ GMB решил эту проблему. Спасибо!
Вам понадобится подзапрос:
select jsonb_agg(jsonb_build_object('me_id', me_id))
from (select * from message order by me_id limit 3) t
В наборе результатов подзапроса есть два столбца с именем me_id
, так что это неоднозначно. Используйте что-то вроде select message.m_id from ...
. Или вы можете использовать синтаксис USING
в соединении, чтобы устранить двусмысленность.
Можете ли вы сказать мне точный запрос, пожалуйста? Я немного ошеломлен этим. Я пытался использовать SELECT message.m_id, но потом получаю эту ошибку: отсутствует запись FROM-clause для таблицы "message"
@André: в своем коде просто замени ON (message_photo.me_id = message.me_id)
на USING (me_id)
. Или: замените select *
на select message.m_id
.
Большое спасибо, что решили это !! Вы очень помогли, большое спасибо.
Эй, это почти помогло... Однако, когда я хочу сделать ЛЕВОЕ СОЕДИНЕНИЕ сейчас, я получаю неоднозначное значение "me_id": --> SELECT jsonb_agg(jsonb_build_object('id', me_id)) from (select * FROM message LEFT JOIN message_photo ON (message_photo.me_id = message.me_id) порядок по message.me_id DESC ограничение 3) t