Возвращаем или нет поле postgresql - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть эти таблицы:

сроки

id | post_id | group_id

post_views

id | post_id | user_id

Мой запрос похож на:

SELECT distinct on (t.post_id) post_id, t.group_id, t.id, t.created_at
FROM timelines t  join post_views pv USING(post_id)
WHERE t.group_id IN (1, 2, 78)

Это "работает ", но мне нужно получить другое поле с именем 'seen', и это поле получит true, если имеет t.post_id = pv.post_id AND user_id = 100, или же вернет false или NULL

Я могу"выполнить WHERE in JOIN.

Спасибо


Пример: https://www.db -fiddle.com / f / m2HdHrZD5fY98tpGa1Eqsw / 0

Ребята, я сделал пример вышечтобы помочь вам, чтобы помочь мне: D

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете подумать, что ваш код работает, но вы должны использовать order by с distinct on.С помощью order by вы можете поставить нужного пользователя вверху, а затем:

SELECT distinct on (post_id) post_id, t.group_id, t.id, t.created_at,
       (p.user_id = 100) as user_100_flag
FROM timelines t join
     post_views pv 
     using (post_id)
WHERE t.group_id IN (1, 2, 78)
ORDER BY post_id, (p.user_id = 100)::int desc;
0 голосов
/ 06 февраля 2019

Вы хотите case выражение?:

SELECT distinct on (t.post_id) post_id, t.group_id, t.id, t.created_at,
       (CASE WHEN t.post_id IN (1, 2, 78) AND user_id = 100 THEN 'true' ELSE 'false' END) AS seen
FROM timelines t  join 
     post_views pv 
     USING(post_id)
WHERE t.group_id IN (1, 2, 78);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...