неповторяющийся столбец в postgresql - PullRequest
0 голосов
/ 17 февраля 2020

мой запрос такой:

SELECT o.id, o.title, oc.category_id,
(SELECT name from categories c where c.id = oc.category_id)
FROM objects o
LEFT JOIN object_categories oc ON oc.object_id = o.id
WHERE type_id = 17

он возвращает мне таблицу как на картинке

my table

Я хочу вернуть неповторяющееся имя категории. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Для этого вы можете использовать выражение DISTINCT ON: https://www.postgresql.org/docs/9.0/sql-select.html#SQL -DISTINCT

1 голос
/ 17 февраля 2020

В Postgres вы можете использовать distinct on:

SELECT DISTINCT ON(c.id)
    o.id, 
    o.title, 
    oc.category_id,
    c.name,
    count(*) over(partition by o.id) cnt
FROM objects o
LEFT JOIN object_categories oc ON oc.object_id = o.id
LEFT JOIN categories c ON c.c.id = oc.category_id
WHERE type_id = 17 
ORDER BY c.id, o.id

Когда категория появляется в более чем одной записи, выбирается только та, которая имеет наименьший идентификатор объекта.

Я использовал идентификатор категории, а не имя, чтобы идентифицировать дубликаты - вместо этого вы можете использовать имя категории, если это важно для вас.

Обратите внимание, что я преобразовал встроенный подзапрос в categories в обычный join, так как я нахожу это более читабельным.

...