У меня есть сообщения, звуки, уведомления. Я хочуPostgres JSON Join, Union
- сообщений сортировки по баллам
- удалить прокатывается те
- присоединиться уведомления с сообщениями и положить присоединившихся них, как высшие оценки
До сих пор я сделал первые два, но не мог Не добавляйте уведомления в качестве первых элементов результата. Это рабочий запрос первых двух.
SELECT posts.id, posts.created_at, posts.data, ((posts.data)->>'score')::NUMERIC as score
FROM posts
WHERE NOT EXISTS (
SELECT *
FROM swipes
WHERE ((swipes.data)->>'post_id')::INT = posts.id AND ((swipes.data)->>'user_id')::INT = 32)
ORDER BY (data)->>'score'
LIMIT 5
Я попытался LEFT JOIN
для добавления уведомления, но не может это сделать.
SELECT posts.id, posts.created_at, posts.data, ((posts.data)->>'score')::NUMERIC as score
FROM posts
WHERE NOT EXISTS (
SELECT *
FROM swipes
WHERE ((swipes.data)->>'post_id')::INT = posts.id AND ((swipes.data)->>'user_id')::INT = 32)
-- The part below is new
UNION ALL
SELECT notifications.id, notifications.created_at, notifications.data, 9999999 AS score
FROM notifications
--- THIS GIVES ERROR ---
LEFT JOIN posts USING (notifications.data)->>'post_id')
WHERE ((notifications.data)->>'user_id')::INT = 32
-- After join order by score
ORDER BY score
LIMIT 5
уведомления имеет столбец с именем data
типа json
. notifications.data->post_id
должен соединить posts.id
с ним по баллам 9999999. где notifications.data->user_id
должен быть равен 32.
вы хотите уведомления как дополнительные столбцы к сообщениям или как дополнительные строки? – Patrick
@Patrick как дополнительные строки – Thellimist