Избегайте дублирования значений в запросе SELECT в PostgreSQL
У меня есть стол с именем product
который содержит две колонки:
id name
1 p1
2 p2
3 p1
4 p3
5 p4
Я запускаю следующий запрос:
SELECT DISTINCT id, name FROM product;
В результате PostgreSQL выдает мне следующий вывод:
id name
1 p1
2 p2
3 p1
4 p3
5 p4
Я хочу избежать дублирования значений в name
поле, поэтому желаемый результат должен выглядеть следующим образом:
1 p1
2 p2
4 p3
5 p4
Как мне добиться этого?
3 ответа
PostgreSQL имеет синтаксис, чтобы сделать это довольно эффективно:
select distinct on (name)
id,
name
from product
order by name,
id;
Заказ по названию обязателен.
Если вы хотите получить список без дубликатов имен, используйте "отличное имя"
select distinct name from product;
и вы также можете добавить номер строки с помощью row_number()
select row_number() over (order by name ) as id, name_list.name
from (select distinct name from product) as name_list;
Я бы порекомендовал использовать оператор SELECT ON () выше. Но если вы не хотите, чтобы дублированные данные помещались в вашу таблицу, вы можете добавить уникальное ограничение в столбце вашего имени.