2015-02-06 60 views
-1

我有一個ID,名稱,價格和人員參數的表。我只需要選擇所有不同的,但id是不同的,這使我的目標變得複雜(我使用id只是爲了處理動態頁面)所以我需要選擇所有參數不同,除了編號爲。我希望我有道理。有沒有辦法解決這個問題?選擇所有列哪裏有一列不是DISTINCT

非常感謝。

例如:

ID | NAME | PRICE | PEOPLE 
1 | beef | 9 | 2 
2 | beef | 5 | 1 
3 | beef | 9 | 2 
4 | pork | 6 | 1 

Result: 

ID | NAME | PRICE | PEOPLE 
1 | beef | 9 | 2 
2 | beef | 5 | 1 
4 | pork | 6 | 1 

我已經解決了這一點。下面是該查詢:

SELECT every.name, every.price, every.people, every.id 
FROM 
(SELECT * FROM sometable) AS every 
INNER JOIN 
(SELECT DISTINCT name, price, people FROM sometable) AS unique 
ON (every.name = unique.name AND every.price=unique.price AND every.people=unique.people); 
+1

不幸的是,這並不是一個足夠清晰的描述,因爲'DISTINCT'適用於整個行集。如果您在表格中發佈了一小段樣本的行,以及給定該輸入行集的示例,您將希望查詢輸出成爲樣本,這將有所幫助。 – 2015-02-06 20:54:09

+0

如果您不想包含id,請將其從select中排除。如果您需要該ID,您將獲得多行。 – jpw 2015-02-06 20:54:24

+0

您也可以在SELECT中使用像MAX(id)這樣的聚合,然後在其他列中使用GROUP BY。 – 2015-02-06 20:58:13

回答

1

您可以從同一個表中創建兩個數據集(uniqall)和加入的那些。您只會從uniq獲得不同的行。因此,您可以確定對於匹配所有三個屬性的all中的任何條目,只有一個可能的ID。

SELECT * FROM 
(SELECT id, name, price, people FROM sometable) as all 
INNER JOIN (SELECT DISTINCT(name, people, price) FROM sometable) as uniq ON 
(all.name = uniq.name AND all.price = uniq.price AND all.people = uniq.people) ; 
+0

非常感謝。我有一些問題,但我解決了這個問題。非常感謝。 – 2015-02-06 22:38:03