2011-06-09 52 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