2013-10-17 22 views
0

我有一個名爲product表,它包含兩列:避免值的重複的SELECT查詢在PostgreSQL的

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 

我應該如何去實現呢?

+0

'DISTINCT'選擇* all *列具有不同值的所有行。在你的例子中,'id'和'name'的每個組合都是不同的,你會得到所有的行。 –

回答

0

,如果你想獲得非重複的名稱列表,請使用「獨特的名字」

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; 
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

+0

您必須在'order by'中添加'id'才能獲得期望的結果一致 –

+0

是的,非常正確。 –

0

我會建議使用上面()語句的選擇是不同的。但是,如果您不希望將重複的數據存入表中,則可以在名稱列中添加一個UNIQUE約束。