0

我有一个名为的表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

我应该如何实现这一目标?

4

3 回答 3

3

PostgreSQL 有一个语法可以相当有效地做到这一点:

select   distinct on (name)
         id,
         name
from     product
order by name,
         id;

需要按名称排序。

http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-DISTINCT

于 2013-10-17T10:21:09.383 回答
0

我建议使用上面的 select distinct on() 语句。但是,如果您不想将重复数据放入表中,则可以在 name 列上添加 UNIQUE 约束。

于 2014-08-22T16:15:29.260 回答
0

如果你想得到不重复的名单,使用'distinct name'

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;
于 2013-10-17T09:44:42.647 回答