2011-06-09 36 views
1

我在查找任何有關執行簡單MySQL查詢的文檔時遇到了很多麻煩,這些查詢將從組合中返回所有不同的值,但也會返回另一個不明顯的列。SELECT DISTINCT不同值的組合,加上非不同值?

在我的情況下,report, topic, lat, lng, event必須是值的不同組合,但我也想返回docID列。

如果我包含docID作爲不同的值,它會返回每個文檔,因爲每個docID都是唯一的。

SELECT distinct report, topic, lat, lng, event, /*and each of their*/ docID FROM reports

我知道這個問題是很簡單,但我無法找到關於它的任何文件。

+0

怎麼樣子查詢? – alex 2011-06-09 23:15:50

+0

似乎可能我想,但這讓我感到奇怪的是,沒有內置的機制來處理這個問題。 – 2011-06-09 23:16:26

+0

然後,您應該決定是否真的需要使用DISTINCT,如果您需要'docID'列,那麼它需要獲取該列中的所有值,除非您想要'docID'上的MININUM或MAXimum或其他集合'專欄。 – Xint0 2011-06-09 23:18:45

回答

1

嘗試使用GROUP BY:

SELECT report, topic, lat, lng, event, docID 
FROM reports 
GROUP BY report, topic, lat, lng, event 

但要注意,如果一個docID將是一個特定的分組中重複的,只有一個值會顯示出來。

4
SELECT report, topic, lat, lng, event, 
group_concat(docID) as ids 
FROM reports 
group by report, topic, lat, lng, event 
0

我發現我解決這個與一組由和MaxMin因爲爲每個不同的線可能有幾個DocId值。

SELECT report, topic, lat, lng, event, Max(docID) FROM reports 
group by report, topic, lat, lng, event 
1

該邏輯可以給你你的答案。

如果幾個文檔具有相同的(報告,主題,經緯度,事件)組合,那麼您希望看到他們的哪個docId?

如果你想要所有這些,那麼你不想要一個真正的獨特。如果你只需要一個(或concat,或任何操作),那麼MySQL不能爲你任意選擇它,你必須查詢它(MIN,MAX,FIRST,GROUP_CONCAT,...)。

然後回覆是:您必須使用GROUP子句。像:

SELECT report, topic, lat, lng, event, MIN(docId) AS docIdMin 
FROM my_table 
GROUP BY report, topic, lat, lng, event