2015-09-22 58 views
1

我有orderids可以有兩種類型,我需要選擇不同的orderid只有一個存在。選擇與兩種類型不同的ID postgresql

數據是這樣的:

orderid 1 type 1 
orderid 1 type 2 
orderid 2 type 1 
orderid 2 type 1 

我想選擇將訂單隻有1型存在。

我想:

select distinct orderid from orders where type=1 and type<>2 

這既返回訂單id 1和2

+1

'type = 1和type <> 2'這當然會優化爲'type = 1',按照定義,如果它等於1,它不能同時等於2。兩個(不同的orderid)記錄都有1行,type = 1,所以它應該返回兩個?我10秒鐘看看它。 –

+1

@DarrylMiles OP只需要orderid = 2,因爲它沒有類型2的記錄 –

回答

2

您可以使用except做到這一點。

select orderid from orders where type = 1 
except 
select orderid from orders where type <> 1 
2

您可以使用group by

select orderid 
from orders 
group by orderid 
having min(type) = 1 and max(type) = 1; 

沒有必要distinctorderid只返回一次。